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; 

根据输出,再结合自己手模的答案很快就能找到找到问题所在啦!

posted @ 2021-03-16 21:19  许江一墨  阅读(561)  评论(0)    收藏  举报