解題想法#
本題目有使用到迴圈的判斷技巧,用 for 和 while 都可以實作此題,目前會先以 while 的做法為主。
1. 找出答案#
在題目敘述中,題目要求我們輸出所經過的天數,而我們可以從史萊姆王和其生成的史萊姆找出關係:
\(史萊姆數量 = 史萊姆王數量 \times 2 ^ 0 + 史萊姆王數量 \times 2 ^ 1 + \cdots + 史萊姆王數量 \times 2 ^ { n - 1}\)
因此我們可以得知:
\(史萊姆數量 = \frac{史萊姆王數量 \times (史萊姆王數量 + 史萊姆王 數量 \times 2 ^ {(天數 - 1)})}{2}\)
我們的目標就是要把天數算出來。
2. 迴圈設置#
首先添加兩個變數 tmp 和 ans ,代表目前的史萊姆數量和答案:
int tmp = 0, ans = 0;
在本章節有提到,我們可以設定 while 的跳脫條件,所以我們可以設定 while 迴圈如下:
while (tmp != t) {
tmp += n + tmp;
ans++;
}
此迴圈會執行兩個動作:
- 增加史萊姆
tmp += n + tmp; - 添加答案天數
ans++;
這個迴圈會在 tmp 等於目標史萊姆數量 t 時停止,即獲得答案。
範例程式#
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, t, tmp = 0, ans = 0;
cin >> n >> t;
while (tmp != t) {
tmp += n + tmp;
ans++;
}
cout << ans;
return 0;
}
