#include <stdio.h>

int main() {
    int K;
    scanf("%d", &K);

    int total_days = 0;
    int total_gold = 0;
    int n = 1;

    while (total_days < K) {
        if (total_days + n <= K) {
            total_days += n;
            total_gold += n * n;
            n++;
        } else {
            int remaining_days = K - total_days;
            total_gold += remaining_days * n;
            break;
        }
    }

    printf("%d\n", total_gold);
    return 0;
}

思路

  1. 分组逻辑:每轮发币模式分为多个组,第1组为1天发1枚金币,第2组为2天发2枚金币,第3组为3天发3枚金币,依此类推。需要记录当前处理的组号(n),每组的天数为n,每组内的每天金币数也为n。
  2. 累加金币:使用循环遍历每一组,直到累计天数超过或等于K天。对于每组,如果当前组的所有天数都可以在K天内完成,则将该组的所有金币累加到总金币中。如果当前组的部分天数在K天内,则仅计算剩余天数对应的金币。
  3. 循环终止条件:当累计天数超过或等于K天时退出循环。
  4. 输出结果:输出最终累计的金币总数。