1 条题解

  • 0
    @ 2026-7-15 2:03:59

    思路

    模拟每个月发生的事,用一个变量 hand 表示手里的钱,saved 表示存在妈妈那里的钱。

    每个月月初:

    1. hand += 300(妈妈给钱);
    2. 如果 hand < 预算,说明这个月钱不够,直接输出 -月份 结束;
    3. 如果 hand - 预算 >= 100,就把整百的部分存起来:能存 (hand - 预算) / 100 张一百;
    4. 扣掉这个月的花销。

    到年末,妈妈把存的钱加 20% 还回来:总钱数 = hand + saved * 1.2。注意 saved * 1.2 可能有小数,题目实际都是整百存款,结果也是整数,用 (int)(saved * 1.2) 或 saved / 100 * 120 即可。

    代码

    #include <stdio.h>
    
    int main() {
        int hand = 0, saved = 0;
    
        for (int month = 1; month <= 12; month++) {
            int budget;
            scanf("%d", &budget);
    
            hand += 300;              // 妈妈给钱
    
            if (hand < budget) {      // 钱不够用
                printf("-%d\n", month);
                return 0;
            }
    
            int left = hand - budget; // 付完预算后剩的钱
            if (left >= 100) {
                int k = left / 100;   // 能存几个整百
                saved += 100 * k;
                hand -= 100 * k;
            }
            hand -= budget;           // 扣掉花销
        }
    
        printf("%d\n", hand + (int)(saved * 1.2));
        return 0;
    }
    

    易错点

    • 判断"钱不够"要在得到 300 元之后、花销之前。
    • 存钱只能存整百,left / 100 自动向下取整,正好。
    • 输出负号格式是 -7 这样的,别写成 7 月 或多打空格。
    • 1

    信息

    ID
    3
    时间
    1000ms
    内存
    256MiB
    难度
    1
    标签
    递交数
    1
    已通过
    1
    上传者