NUC1313 皇帝的金币

皇帝的金币

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

问题描述

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

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

输入描述
输入最少包含一行,但是不要多于21行。输入的每一行(除去最后一行)包含一个可以进行一次程序运行的数字,是一个确切的整数(在1..10000的范围内)代表了天数。输入的最后是以含0的一行为标志的。
输出描述
对应于每一次程序运行对应一行输出。这一行包含对应于输入行的天数,跟着一个空格和在这些天中支付给骑士金币的总数,从第一天开始。
样例输入
10
6
7
11
15
16
100
10000
1000
21
22
0
样例输出
10 30
6 14
7 18
11 35
15 55
16 61
100 945
10000 942820
1000 29820
21 91
22 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;  
    }  







posted on 2017-05-12 22:27  海岛Blog  阅读(181)  评论(0编辑  收藏  举报

导航