原题如下:
下面来看题解:
分析:第一天发1枚金币,后面2天发2枚,再后面3天发3枚......
其实我们可以先将其看做是1天发1枚金币,每天多的金币看做是额外的奖励。
额外金币随着跨越天数的增加而增加。
代码如下:
#include <stdio.h>
int main()
{
int day;//总天数
scanf("%d", &day);
int sum = 0, over_day = 1, num = 1;
int i;
for (i = 1; i <= day; i++) {
sum += num;
if (i == over_day) {
num++; //num表示当天可获得的金币数
over_day += num; //over_day表示金币能增加时需要跨过的天数
}
}
printf("%d\n", sum);
return 0;
}
用for循环将每天发1枚金币的金币总数记录下来, 然后再算额外金币数。
这里巧妙之处就在于每天发的金币数和跨越天数是一样的。 所以 if 语句判断 i 和跨越天数是否相等,相等就使可获得金币数+1,同时跨越天数增加,增加金币数大小。