#include<iostream>
#include<cstring>
using namespace std;
int a[1000]; //定义数组,当数组a[i]=-1表示对应数字已经删除
int main(){
int n;
while(scanf("%d",&n)==1){
memset(a,0,sizeof(a)); //每次循环将数组置0,表示数组待删除
int i=0,interval =0;
int delcount = 0;//记录删除数字的个数
while(1){
i = i%n; //下标每次都需要进行循环取余
// cout<<"i="<<i<<" ";
if(a[i]!=-1) //只要没有被删除,那么统计时就算一个间隔,因此间隔interval+1
interval++;
// cout<<"interval="<<interval<<endl;
if(interval==3){ //当interval==3表示已经跳过两个间隔
delcount++; //此时删除数字的个数加1
a[i] = -1;//将a[i]置为-1,表示删除下标i所在的元素
interval = 0;//删除完数字,间隔立即置为0,表示重新开始计算间隔
// cout<<"delcount="<<delcount<<endl;
}
if(delcount==n){ //当删除的数字个数为n时,表示删除到最后一个数字
cout<<i<<endl;//输出对应的下标即可,并结束循环删除操作
break;
}
i++; //继续判断i下标是否可以删除
}
}
return 0;
}
华为2016研发工程师编程题第一题[删数]
最新推荐文章于 2022-04-20 22:33:55 发布