P1089 [NOIP2004 提高组] 津津的储蓄计划 题解
题解:P1089
本蒟蒻的第二篇题解!
大致浏览了一下其他题解,发现大部分(c++的题解)貌似都没有我的题解简短(自我感觉及其良好),题目传送门在这:P1089
我们先来分析一下题目,津津每个月都会稳定拿到300元,同时会估算自己本月的花费,设N为津津拿到的钱(注意!这里拿到的钱不仅是妈妈给的,还有上个月剩下的)与本月花费的差值,若N为负值,则说明本月钱不够花(津津要吃土了),如果N为正值,又要分两类讨论:若N >= 100,则需要将整钱存在妈妈那里,剩下的钱拿在手里;如果N < 100, 那么津津就直接把N元拿在手里作为余下的钱。
题目到这里已经很清晰了,无非是需要用几个分支语句来分类讨论N的情况,写就完了。
代码如下,千万不要抄题解噢!(一般来说有这句话的题解里都有防抄袭机制)
#include<bits/stdc++.h>
using namespace std;
int N, hua[15], ans, tot, k, yu;
//hua[15]表示每月的花费,tot表示存钱,yu表示余下的钱,k是系数。
int main(){
for (int i = 1; i <= 12; i++){//遍历12个月
scanf("%d", &hua[i]);
N = 300 + yu - hua[i];
if (N<0){
printf("-%d", i);
return 0;
}
if (N>=100){
k = N / 100;
yu = N - 100 * k;
tot += 100 * k;
}
else{
yu = N;
}
}
ans = yu + tot * (1+0.2);
printf("%d", ans);
return 0;
}
怎么样,我自认为比较清晰易懂,不用像其他大佬那样精准计算张数什么...当然其他题解也很不错呀。
稍微需要大家注意的是这里对于N < 0的处理:虽然在这里直接return 0直接结束程序会导致后面的数据无法读入,但是由于洛谷及比赛的测评机都是直接读输出(输入输出是分开的),所以这样写是没有问题的。尽管在自己调试的时候会有些奇怪。(可能只有我会奇怪?)
再给刚入门的小白教一个调错的方法(大佬请无视!):即输出调错法,比如我这个代码样例二一开始的输出是3600,后来在循环的末尾加上了两句:
cout << "手中剩余:" << yu << endl;
cout << "存钱:" << tot << endl;
根据输出,再结合自己手模的答案很快就能找到找到问题所在啦!

浙公网安备 33010602011771号