洛谷训练新手村之“顺序与分支”题解

P1422 小玉家的电费

题目链接:https://www.luogu.com.cn/problem/P1422
题目大意:
夏天到了,各家各户的用电量都增加了许多,相应的电费也交的更多了。小玉家今天收到了一份电费通知单。小玉看到上面写:据闽价电[2006]27号规定,月用电量在150千瓦时及以下部分按每千瓦时0.4463元执行,月用电量在151~400千瓦时的部分按每千瓦时0.4663元执行,月用电量在401千瓦时及以上部分按每千瓦时0.5663元执行;小玉想自己验证一下,电费通知单上应交电费的数目到底是否正确呢。请编写一个程序,已知用电总计,根据电价规定,计算出应交的电费应该是多少。
解题思路:分段计价。
实现代码如下:

#include <bits/stdc++.h>
using namespace std;
double a, b;
int main() {
    scanf("%lf", &a);
    if (a <= 150) b = a * 0.4463;
    else if (a <= 400) b = 150 * 0.4463 + (a - 150) * 0.4663;
    else b = 150 * 0.4463 + 250 * 0.4663 + (a - 400) * 0.5663;
    printf("%.1lf\n", b);
    return 0;
}

P1085 不高兴的津津

题目链接:https://www.luogu.com.cn/problem/P1085
题目大意:
津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。
解题思路:循环遍历一遍找最不高兴的那天。
实现代码如下:

#include <bits/stdc++.h>
using namespace std;
int a[8], b;
int main() {
    for (int i = 1; i <= 7; i ++) {
        cin >> a[i] >> b;
        a[i] += b;
    }
    b = 0;
    for (int i = 1; i <= 7; i ++) if (a[i] > 8 && a[i] > a[b]) b = i;
    cout << b << endl;
    return 0;
}

P1089 津津的储蓄计划

题目链接:https://www.luogu.com.cn/problem/P1089
题目大意:模拟题目要求的储蓄方案,判断会不会在某个月出现资金紧张,或者确定最终能够获得的钱。
解题思路:模拟一下这个过程就可以解决这个问题。
实现代码如下:

#include <bits/stdc++.h>
using namespace std;
int a, b, c;   // a表示这个月的花费,b表示目前存到妈妈那里的钱(最终计算前不包含利息),c表示手头的钱
int main() {
    for (int i = 1; i <= 12; i ++) {
        cin >> a;
        if (a > c+300) {
            cout << -i << endl;
            return 0;
        }
        c += 300 - a;
        b += c/100 * 100;
        c %= 100;
    }
    cout << c + b/5*6 << endl;
    return 0;
}

P1909 买铅笔

题目链接:https://www.luogu.com.cn/problem/P1909
题目大意:
P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物。她发现商店一共有 33种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同。为了公平起 见,P老师决定只买同一种包装的铅笔。
商店不允许将铅笔的包装拆开,因此P老师可能需要购买超过nn支铅笔才够给小朋 友们发礼物。
现在P老师想知道,在商店每种包装的数量都足够的情况下,要买够至少nn支铅笔最少需要花费多少钱。

解题思路:对于第i种铅笔,假设它有a盒,那么我们需要买 \(\lceil \frac{n}{a} \rceil\) 盒,我们用表达式 (n+a-1)/a 来表示 n 对 a 向上取整的结果。
实现代码如下:

#include <bits/stdc++.h>
using namespace std;
int n, a, b, c = INT_MAX;
int main() {
    cin >> n;
    for (int i = 0; i < 3; i ++) {
        cin >> a >> b;
        c = min(c, (n+a-1)/a*b);
    }
    cout << c << endl;
    return 0;
}
posted @ 2019-11-24 21:15  quanjun  阅读(253)  评论(0编辑  收藏  举报