POJ2000

问题描述:

国王用金币支付他忠诚的骑士。在他服役的第一天,骑士收到一枚金币。在接下来的两天(服役的第二天和第三天)中,骑士获得两枚金币。在接下来的三天(服役的第四天,第五天和第六天)中,骑士获得三枚金币。在接下来的四天(服役的第七天,第八天,第九天和第十天)中,骑士获得四枚金币。这种付款模式将无限期地继续:在连续N天的每一天收到N金币后,骑士将在接下来的N + 1天连续每天收到N + 1金币,其中N是任何正整数。 

您的程序将确定在任何给定天数(从第1天开始)支付给骑士的金币总数。 

输入:

输入包含至少一行但不超过21行。输入文件的每一行(最后一行除外)包含问题的一个测试用例的数据,由一个整数(在1..10000范围内)组成,表示天数。输入的结尾由包含数字0的行发出信号。

输出:

每个测试用例只有一行输出。此行包含相应输入行的天数,后跟一个空格以及从第1天开始在给定天数内支付给骑士的金币总数。

样例输入:

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

想法:把每天需要给的金币数列出来,每个阶段一行,就像这样:

1

2  2

3  3  3

...  ...  ...

n  ...  ...  n

恰好每一行的数字和行一样,用一个变量计数直到给定天数,将金币逐行累加,每一列从1到行号,每加一个数就计数一次,计数到给定天数结束。

import java.util.Scanner;
public class Main {
	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()) {
			int day=0,n=0,money=0;
			day = sc.nextInt();
			if(day==0) break;
			for(int i=1,cn=1;cn<=day;i++) {//cn记录天数,从1开始,直到给定天数day
				for(int j=1;j<i+1&&cn<=day;j++,cn++) {
					money+=i;
				}
			}
			System.out.println(day+" "+ money);
		}
		sc.close();
	}
}

猜你喜欢

转载自www.cnblogs.com/minicui/p/9848649.html
POJ
今日推荐