一共n个数,从k开始找,找第m次,找到后将该数提出,下次从m+1位开始重复。
思路:最简单的思路就是用while一直找找到只剩一个数后结束循环,
第一个while(count<n-1)//我们一共要提出的数n-1个所以当count累加到n-1时程序结束
int i=0; // 记录找了几次
第二个whlie(i<m) //于第一同理
k=k%n;// 保证下标不会越界 当>5时 保证在n范围内无限 0 1 2 3 4
if(nums[k]!=-1) //如果这个数没被标记就交一次查找次数 { i++; }
if(i==m) //当等于第m次时将这次位置的数标记 { nums[k]=-1; //以-1为标记当作提出
count++;
}
k++;//
//以此类推 一直到数组n-1个数全被标记最后输出仅剩的数即可,题目要的是编号为了方便我是从0开始赋值的值即编号
#include <iostream>
using namespace std;
int main()
{
int n,m,k,index[105],lastidex=0;
cin>>n>>k>>m;
for(int j=0;j<n;j++)
{
index[j]=j;
}
int count=0;
while(count<n-1)
{
int i=0;
while(i<m)
{
k=k%n;
if(index[k]!=-1)
{
i++;
}
if(i==m)
{
index[k]=-1;
count++;
}
k++;
}
}
for(int i=0;i<n;i++)
{
if(index[i]>=0)
{
cout<<index[i];
}
}
return 0;
}