题目描述
有一个数组a[N]顺序存放0~N-1,要求每隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。以8个数(N=7)为例:{0,1,2,3,4,5,6,7},0->1->2(删除)->3->4->5(删除)->6->7->0(删除),如此循环直到最后一个数被删除。
CODE
#include<iostream>
#include<fstream>
#include<string>
#include<vector>
using namespace std;
int main(){
int n;
while(cin>>n){
if(n>1000){
n=1000;
}
vector<int> vec(n,0);
int i=0,cnt=0;
int num=0;
while(num<n){
i%=n;
cnt%=3;
if(cnt==2&&!vec[i]){
vec[i]=1;
num++;
if(num==n){
cout<<i<<endl;
break;
}
}
i++;
cnt++;
while(vec[i%n]){
i%=n;
i++;
}
}
}
return 0;
}