题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,
每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。
当一个数字删除后,从被删除数字的下一个继续删除第m个数字。
每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。
当一个数字删除后,从被删除数字的下一个继续删除第m个数字。
求出在这个圆圈中剩下的最后一个数字。
代码如下:
#include<iostream>
using namespace std;
#define MIN -1
int LastRemain(int *data,int length,int k)
{
int lastinter = data[length - 1];
int len = length;
int i = 0;
int j = 0;
while(len > 1)
{
j = 1;
while(true)
{
if(data[i] != MIN)
{
if(j == k)
break;
j++;
lastinter = data[i];
}
i = (++i)%length;
}
data[i] = -1;
len--;
}
return lastinter;
}
int main()
{
int data[] = {3,5,8,10,11};
cout<<"the last one is : "<<LastRemain(data,5,3)<<endl;
return 0;
}