國王將金幣作為工資,發放給忠誠的騎士。第一天,騎士收到一枚金幣;之後兩天 (第二天和第三天),每天收到兩枚金幣;之後三天 (第四、五、六天),每天收到三枚金幣;之後四天(第七、八、九、十天),每天收到四枚金幣 ……;這種工資發放模式會一直這樣延續下去:當連續 N 天每天收到 N 枚金幣後,騎士會在之後的連續 N+1 天裡,每天收到 N+1 枚金幣。
請計算在前 K 天裡,騎士一共獲得了多少金幣。
範例測資
範例輸入 | 範例輸出 |
---|---|
輸入文件只有1行,包含一個正整數 K,表示發放金幣的天數。 | 輸出文件只有 1 行,包含一個正整數,即騎士收到的金幣數。 |
6 | 14 |
1000 | 29820 |
解題思路
可以先將每一天會發放的金幣數量紀錄起來。跑一個 For迴圈 從 0 到 1000000,在迴圈外面宣告一個 count 變數預設為 1,代表發放的金幣數量。在迴圈中再跑一個 For迴圈 從 0 到 count – 1,並將 count 進行 Push_Back 至一個 Vector 中。Push_Back 的迴圈結束後要將最外層的 For迴圈的 i += count,並且將 count++。
跑一個 For迴圈 從 0 到 K-1,並且宣告一個 ans 變數預設為 0,每一次進迴圈都將 ans += 剛剛宣告的 Vector 的第 i 個位置。
範例程式碼-ZeroJudge C164: 金幣
#include <iostream>
#include <vector>
using namespace std;
int main() {
cin.sync_with_stdio(0);
cin.tie(0);
int N, count = 1, ans = 0;
cin >> N;
vector<int>num;
for (int i = 0; i<1000000; i++) {
for (int j = 0; j<count; j++) num.push_back(count);
i += count;
count++;
}
for (int i = 0; i<N; i++) ans += num[i];
cout << ans << "\n";
}
//ZeroJudge C164
//Dr. SeanXD