史萊姆生態區

解題想法

本題目有使用到迴圈的判斷技巧,用 forwhile 都可以實作此題,目前會先以 while 的做法為主。

1. 找出答案

在題目敘述中,題目要求我們輸出所經過的天數,而我們可以從史萊姆王和其生成的史萊姆找出關係:

史萊姆數量=史萊姆王數量×20+史萊姆王數量×21++史萊姆王數量×2n1史萊姆數量 = 史萊姆王數量 \times 2 ^ 0 + 史萊姆王數量 \times 2 ^ 1 + \cdots + 史萊姆王數量 \times 2 ^ { n - 1}

因此我們可以得知:

史萊姆數量=史萊姆王數量×(史萊姆王數量+史萊姆王數量×2(天數1))2史萊姆數量 = \frac{史萊姆王數量 \times (史萊姆王數量 + 史萊姆王 數量 \times 2 ^ {(天數 - 1)})}{2}

我們的目標就是要把天數算出來。

2. 迴圈設置

首先添加兩個變數 tmpans ,代表目前的史萊姆數量答案

int tmp = 0, ans = 0;

在本章節有提到,我們可以設定 while 的跳脫條件,所以我們可以設定 while 迴圈如下:

while (tmp != t) {
    tmp += n + tmp;
    ans++;
}

此迴圈會執行兩個動作:

  1. 增加史萊姆 tmp += n + tmp;
  2. 添加答案天數 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;
}