国王给为他出生入死的忠诚骑士分金币, 第一天给骑士1枚金币,随后两天每天给骑士2枚金币,接着的三天每天给3枚金币,以此类推,随后的n天给n枚金币
分析:可以用下图来表示国王每天分发的金币数量,第一天给骑士1枚金币(下图中的第一行),随后两天每天给骑士2枚金币(图中第二行),接着的三天每天给3枚金币(图中第三行)...
1
2 2
3 3 3
4 4 4 4
...
前面n行总计的天数是
,
总计发的金币数是
对于给定的天数m,只要找到这个天数在图中的第几行,然后从该行总计发的金币数
减去m天到总天数
之间未发的数量即可
代码如下
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int m;
int total_days;
int i;
int total_coins = 0;
printf("Please input the days:");
scanf("%d", &m);
for (i = 1; ; i++) {
total_coins += i * i;
total_days = i * (i + 1) / 2;
if (total_days >= m)
break;
}
total_coins -= i * (total_days - m);
printf("\nKnight got total %d coins at %d day\n", total_coins, m);
return 0;
}
1771



被折叠的 条评论
为什么被折叠?



