P2669 [NOIP2015 普及组] 金币 题解

· · 题解

题意

工资发放规则如下:n 天每天收到 n 枚金币后,骑士会在之后的连续 n+1 天里,每天收到n+1 枚金币。

思路

使用 while 循环,用一个变量 m 计是第几波发工资,如果当前的天数不够 m ,则用总天数直接乘以 m ,直接将天数清零,如果总天数够 m ,加上 m 的平方,为 m 天乘以每一天的工资 m ,将天数减去 m

代码

#include <bits/stdc++.h>
using namespace std;
int main() {
    int a = 0;
    int day;
    cin >> day;
    int m = 1;计本次工资是第几波
    while (day != 0) {//天数未满时
        if (day < m) {//天数不够时
            a = a + day * m;//加上这些天的工资
            day = 0;//天数清零,工作做完
        } else {//天数够了
            day -= m;//天数减去 m
            a = a + m * m;//加上这些天的工资
        }
        m = m + 1;//波数加一
    }
    cout << a; //输出总工资数
}