C

POJACM演習[No.2000]



Poj Acm Exercise No



金貨
制限時間: 1000MS メモリ制限: 30000K
総提出数: 10469 承認済み: 6505

説明

王は忠実な騎士に金貨を払います。奉仕の初日、騎士は金貨を1枚受け取ります。次の2日間(サービスの2日目と3日目)のそれぞれで、騎士は2枚の金貨を受け取ります。次の3日間(4日目、5日目、6日目)のそれぞれで、騎士は3枚の金貨を受け取ります。次の4日間(7日目、8日目、9日目、10日目)のそれぞれで、騎士は4枚の金貨を受け取ります。この支払いパターンは無期限に続きます。連続するN日ごとにN枚の金貨を受け取った後、騎士は次のN + 1日ごとにN + 1枚の金貨を受け取ります。Nは任意の正の整数です。

プログラムは、任意の日数(1日目から)に騎士に支払われる金貨の総数を決定します。

入力



入力には、少なくとも1行、ただし21行以下が含まれます。入力ファイルの各行(最後の行を除く)には、問題の1つのテストケースのデータが含まれています。これは、日数を表す1つの整数(1..10000の範囲)で構成されます。入力の終わりは、番号0を含む行によって通知されます。

出力

テストケースごとに1行の出力があります。この行には、対応する入力行からの日数が含まれ、その後に1つの空白スペースと、1日目から始まる指定された日数で騎士に支払われた金貨の総数が続きます。

サンプル入力



import java.util.* public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in) while(true) { int day = Integer.valueOf(cin.nextLine()).intValue() if(day == 0) break System.out.println(day + ' ' + getTotalCoin(day)) } } private static int getTotalCoin(int day) { int total = 1 int factor = 2 int index = 0 if(day == 1) return 1 for(int i = 2 i <= day i++) { if(index == factor) { index = 0 factor ++ } total += factor index ++ } return total } }

サンプル出力

10 6 7 11 15 16 100 10000 1000 21 22 0 

この質問の鍵は、増分係数を設定し、N個の数値を調整した後、係数をN +1に調整することです。

10 30 6 14 7 18 11 35 15 55 16 61 100 945 10000 942820 1000 29820 21 91 22 98