题:有n个人围成一个圈,顺序排好,开始报数,凡报到3倍数的人退出圈子,问最后留下的是原来的第几位?
#include<stdio.h>
#define N 20
int main()
{
int m,n,s,num=1,a[N][N]={};
for(m=0;m<N;m++)
for(n=0;n<N;n++)
{
if(m=0)
a[m][n]=num++;
else
{
if(a[m-1][n]%3!=0) //前一轮能被三整除的人退出
a[m][n]=num++;
else
a[m][n]=0;
}
}
for(m=0;m<N;m++)
{
for(n=0;n<N;n++)
{
printf("%4d",a[m][n]); //输出每一轮所报的数字
}
printf("\n");
}
for(m=0;m<N;m++) //检查哪一轮只有一个人(最后一个人)
{
s=0;
for(n=0;n<N;n++)
{
if(a[m][n]==0)
s++;
}
// printf("%d\n",s); //可以将每一轮人在报数的人数输出
if(s==1)
break;
}
for(n=0;n<N;n++) //检查这个人在最初时的序号
{
if(a[m][n]!=0)
printf("The last one is %d\n",n+1);
}
return 0;
}