题目:有n个小孩按顺序号排成一圈,从第一个小孩开始1至3报数,凡报数为3的小孩从圈中走出来
求最后出圈的小孩的顺序号是多少 ?
思路:定义一个数组,120120这样赋值,用一个变量记录前一个数值的索引值,这样可以实现循环赋值
不断给非零的数据赋值,直到最后数组值全部为0,最后为0的数值的索引值加1即是顺序号。刚看过链表,也许还可以用链表来做。
#include <iostream.h>
int Circle(const int &n)
{
int *pa=new int[n];
bool bflag=false; //数组里面的数据是否全部为0的标志
int nlast; //上一个数据的索引号
for(int i=0;i<n;i++)
{
*(pa+i)=(i+1)%3; //给数组赋值120120
}
nlast=n-1;
while(!bflag)
{
bflag=true;
for(i=0;i<n;i++)
{
if(*(pa+i)!=0)//跳过为0的数,给非零数据重新赋值
{
*(pa+i)=(*(pa+nlast)+1)%3;
nlast=i;
bflag=false;
}
}
}
delete []pa;
pa=0;
return (nlast+1);//最后一个数据的索引值加1即为要得到的数
}
main()
{
cout<<Circle(1000)<<endl;
return 0;
}