練習 - GoldCoins

題目:國王要給他的忠誠騎士支付金幣。在他服務的第一天,騎士將獲得一枚金幣。在後兩天的每一天(服務的第2和第3天),騎士將獲得2枚金幣。在接下來的3天的每一天(服務的第4、第5和第6天),騎士將獲得3枚金鈽。在接下來的4天的每一天(服務的第7、第8、第9和第10天),騎士將獲得4枚金幣。這種支付模式將無限期地繼續下去:在連續N天的每一天獲得N枚金幣之後,在下一個連續的N+1天的每一天,騎士將獲得N+1枚金幣,其中N是任意的正整數。
請編寫程式,在給定天數的情況下,求出國王要支付給騎士的金幣總數(從第一天開始計算)。

輸入:輸入至少一行,每行列出問題的一個測試資料,一個整數表示天數。一行輸入0表示輸入結束。

輸出:對於輸入中列出的每個測試用例,輸出一行。每行先列出在輸入中列出的天數,後面的一個空格。然後是在這些天數中從第一天開始計算總共要支付給騎士的金幣總數。

import java.util.Scanner;

public class GoldCoins {

	public GoldCoins() {
		int ans = 0;
		Scanner scanIn = new Scanner(System.in); // 輸入第一個日數
		int n = scanIn.nextInt();
		while (n > 0) {
			for (int i = 0, j = 1; i <= n; j++) { // i記錄當前天數,j記錄時間段序號,即國王在該時間段內每天獎勵的金幣數,k為時間段內的剩餘天數。
				int k = j;
				while (k-- > 0 && ++i <= n) {
					ans += j;
				}
			}
			System.out.println(n + " " + ans);
			ans = 0;
			scanIn = new Scanner(System.in);
			n = scanIn.nextInt();
		}
	}

	public static void main(String[] args) {
		GoldCoins goldCoins = new GoldCoins();
	}

}

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

*

驗證碼 * Time limit is exhausted. Please reload CAPTCHA.

This site uses Akismet to reduce spam. Learn how your comment data is processed.