您的位置:首页 > 编程语言 > Go语言

POJ 2000 Gold Coins

2015-11-19 22:33 441 查看
题目描述

国王用付给他忠诚的骑士金币。在服役的第一天,骑士收到了一枚金币。在之后两天的每一天(服役的第二第三天),骑士收到两枚金币。在之后三天的每一天(服役的第四五六天),骑士收到三枚金币。这种支付模式将不限期地继续下去:在连续的 n 天每天收到 n 枚金币之后,骑士将会在接下来的 n+1 天每天收到 n+1 枚金币,这里 n 是一个任意的正整数。

你的程序要判定在任意给定的天数骑士累计收到了多少枚金币(从第一天开始)。

输入

输入包含至少一,但是至多二十一行。输入的每行(除了最后一行)包含问题的一组测试实例,一组实例是一个整数(在 1...10000 范围内),代表天数。输入的结束以包含一个数 0 的行表示。

输出

对于每组测试实例将有一行。这一行包含来自对应输入行的天数,接下来是一个空格和从第一天到给定的天数里,骑士收到的金币数。

来源

Rocky Mountain 2004

思路

数据比较小,直接模拟。另外算一下的话可以 O(1),这里就不算了。

代码

#include <stdio.h>

const int MAXN = 10000 + 5;
int pay[MAXN];

int main()
{
int now = 1;
int cnt = 0;
for (int i = 1; i < MAXN; i++) {
pay[i] = now;
cnt++;
if (cnt == now) {
now++;
cnt = 0;
}
}
for (int i = 1; i < MAXN; i++)
pay[i] += pay[i - 1];
for (int n; scanf("%d", &n) && n; )
printf("%d %d\n", n, pay
);
return 0;
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: