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;
}
發佈留言