Regionals 2004 >> North America - Rocky Mountain
问题链接:UVALive3045 POJ2000 ZOJ2345 Gold Coins。基础练习题,用C语言编写。
题意简述:骑士第1天获得1个金币,之后的2天获得2个金币,之后的3天获得3个金币,......,之后的i天获得i个金币,......。问到第n天总共获得多少个金币。
问题分析:这是一个数列求和问题,用程序解决比用数学解决方便很多。
程序中,用数组ans[]存储金币之和,即ans[i]为到第i天为止金币之和,设置ans[i]的初始值为0(程序员要尽量避免使用缺省值,以免得到意外的计算结果,除非缺省值绝对有保障)。
AC的C语言程序如下:
/* UVALive3045 POJ2000 ZOJ2345 Gold Coins */ #include <stdio.h> #define MAXN 10000 int ans[MAXN+1] = {0}; void maketable() { int i, j, k; j = 1; /* Ai, S=1,2,2,3,3,3,4,4,4,4,...... */ k = 1; /* 同值计数变量:j值够j个(用k来计数, k=j时)则j增1 */ for (i=1; i<=MAXN; i++){ ans[i] = j + ans[i - 1]; if (k == j){ j++; k = 0; } k++; } } int main(void) { int n; maketable(); while(scanf("%d", &n) != EOF && n != 0) printf("%d %d ", n, ans[n]); return 0; }