Q1-找出口

2022.11.11 PM 10:30 by CBJ

來源 : 111資訊學科能力競賽複賽-彰雲嘉
標籤 : 模擬法
難易度 : 2
題目敘述 : 
你被傳送到了一個一維座標平面上,必須要找到出口才能順利逃脫。已知出口的位置是x,若x為正數則表示在0的右邊,反之,若x為負數則表示在0的左邊。
一開始你會位在0的位置,為了找到出口你擬定了一個策略:首先先往右1*1單位,然後再往左走2*2單位,然後再往右走3*3單位...以此類推。
所求為找到出口時所花的次數。

輸入說明 :
輸入一個整數x,代表出口的座標位置

範例測資 : 
範例輸入
4
範例輸出
3

測資說明 :
首先第一次會從0往右走1*1步到1, 第二次往左走2*2步到-3, 第三次再往右走3*3步到6, 此時已會經過4, 所以答案為3
解題想法 : 根據題意實作,並隨時記錄當前的次數,模擬過程中記錄當前狀態和是否已超過出口(超過出口的判斷方式和當前位置的正負以及x的正負有關)。最後輸出次數即可。
//C++ language
//solution link(含註解): https://github.com/CBJ0519/CBJsProgramDiary.com/blob/main/%E8%B3%87%E8%A8%8A%E5%AD%B8%E7%A7%91%E8%83%BD%E5%8A%9B%E7%AB%B6%E8%B3%BD/111%E5%BD%B0%E9%9B%B2%E5%98%89/Q1-%E6%89%BE%E5%87%BA%E5%8F%A3.cpp

#include<iostream>
using namespace std;
int main(){
    int x; cin>>x;
    bool isneg=false;
    if(x<0) isneg=true;
    int now=0;
    int base=1;
    int dir=1;
    int times=0;
    while(1){
        if((isneg && now<=x) || (!isneg && now>=x)){
            break;
        }
        now+=base*base*dir;
        base++;
        dir*=-1;
        times++;
    }
    cout<<times<<"\n";
    return 0;
}

相關文章

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *