有2M个人排成一圈。顺时针1至p报数。报p者出列,当出列人数为M时,游戏结束。编写一个程序输出剩下的M个人原来的编号。
#include<iostream.h>
#define M 20
#define P 6
void main(){
int a[2*M+1];
int i=0;
int k=0;
int j=0;
for(i=1;i<=2*M;i++)
a[i]=i;
i=0;
while(k<M)
{
i=i+1;
if(i>2*M)
i=1;
if(a[i]!=0)
{
j=j+1;
if(j==P){
j=0;
a[i]=0;
k=k+1;}
}
}
cout<<M<<endl;
for(i=1;i<=2*M;i++)
if(a[i]!=0)
cout<<a[i]<<" ";
}
//本算法妙在将出列的人的值改为0;并让为0的人不报数。实现了出列M人,但是将其改为0并不是真正出列。
//书的后面将介绍真正让圈内的人出列的算法。