国王给为他出生入死的忠诚骑士分金币, 第一天给骑士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;
}