題目連結:玩具謎題
提高組日常水題。
直接模拟,有需要注意的點會在代碼後講解:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m;
scanf("%d%d",&n,&m);
int dirt[n];
char name[n][];
for(int i=;i<n;i++){
char x;
scanf("%d",&dirt[i]);
scanf("%c",&x); //1
scanf("%s",name[i]);
}
int cur=; //2
for(int i=;i<m;i++){
int a,b;
scanf("%d%d",&a,&b);
if(a+dirt[cur]==){ //3
cur+=b;
}else{
cur-=b;
}
if(cur<){ //4
cur+=n;
}else if(cur>=n){
cur-=n;
}
}
printf("%s",name[cur]);
return ;
}
隻提4處:
1處:這是為了把數字與名字之間的空格讀入扔掉,為以後輸出省了一點事(好像更麻煩了?無所謂,你自己抉擇。)
2處:cur代表目前走到哪個小人
3處:自己畫個圖就明白了為什麼這麼寫。
4處:防止越界。
順便提一下:如果有的人讨厭用字元串,還可以用rewind()函數,來移動檔案流指針,也就是說,讀入名字不記錄,等計算出第幾個人後,回去再讀出來是第幾個人。