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