#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 发布
本文介绍了一个基于约瑟夫环问题的C++程序实现。该程序通过使用数组来模拟环形链表,并实现了每数到第三个数字就删除的操作,直到最后一个数字被找到。文章详细解释了程序的主要逻辑及关键步骤。
760

被折叠的 条评论
为什么被折叠?



