小孩出圈问题

来源:互联网 发布:raphael.js 编辑:程序博客网 时间:2024/04/28 04:33

题目:有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;
}

 

原创粉丝点击