有一个班的同学(学号从1到55)在做逢七坐的游戏。开始时所有的人都是站着的,然后从第一个同学开始报数,1234567 123456。。。这样,报七的同学坐下,下一个人从1开始,报数到最后一个同学后从第一个同学开始报数(比如最后一个同学喊5,第一个同学就接着报6),求最后只留下一个站着的那个同学是多少号?
分析如下图:
c++代码如下:
#include<iostream>
using namespace std;
#define N 55
//n个人循环报数,报到7退出,最后剩余第几个人。
int zui_zhong()
{
int still_num,i,j=1;//still_num表示剩余的人数
int a[N];
still_num=N;
for(i=0;i<N;i++)
{
a[i]=i+1;
}
while(still_num>1)
{
for(i=0;i<N;i++)
{
if(a[i]==0) continue;
if(j%7==0)
{
still_num--;
a[i]=0;
j++;
}
else
j++;
}
}
for(i=0;i<N;i++)
{
if(a[i]!=0)
{
cout<<a[i];
}
}
return 0;
}
int main()
{
zui_zhong();
}