NUC1313 皇帝的金币

来源:互联网 发布:公司网络不稳定怎么办 编辑:程序博客网 时间:2024/04/25 23:07

皇帝的金币

时间限制: 1000ms 内存限制: 65536KB

问题描述

国王给他忠诚的骑士金币。在他服役的第一天,骑士得到一枚金币。在接下来的两天中(服役的第二天和第三天),骑士得到了两枚金币。在接下来的三天中(服役的第四天,第五天,第六天),骑士得到了三枚金币。在接下来的四天中(服役的第七天,第八天,第九天和第十天),骑士得到了四枚金币。这种模式的支付方式是不确定的:在得到了N枚金币后,这个骑士会在接下来的N+1天中每天得到N+1枚金币,N是任意的正整数。

你编的程序会决定这任意一天付给骑士的金币的数目(从第一天开始)

输入描述
输入最少包含一行,但是不要多于21行。输入的每一行(除去最后一行)包含一个可以进行一次程序运行的数字,是一个确切的整数(在1..10000的范围内)代表了天数。输入的最后是以含0的一行为标志的。
输出描述
对应于每一次程序运行对应一行输出。这一行包含对应于输入行的天数,跟着一个空格和在这些天中支付给骑士金币的总数,从第一天开始。
样例输入
106711151610010000100021220
样例输出
10 306 147 1811 3515 5516 61100 94510000 9428201000 2982021 9122 98
来源
Rocky Mountain 2004


问题分析:

这个题与《UVALive3045 POJ2000 ZOJ2345 Gold Coins》完全相同,代码直接拿过来就可以了。

程序说明:

参见参考链接。

参考链接:UVALive3045 POJ2000 ZOJ2345 Gold Coins

题记:

程序写多了,似曾相识的也就多了。


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", n, ans[n]);                return 0;      }  







0 0
原创粉丝点击