题目:
有10个人围成一圈,顺序排号0~9,从第一个人开始报数(从1到3报数),凡是报到3的人退出圈子,剩下的继续从1开始报数,问最后留下来的人序号是多少?
分析:
先将所有人标记为1,报数时若报到3,标记为0,出局数加一,即此人出局,然后继续报数,直至出局数为9时,得出最后一个人的序号数。
代码:
#include <stdio.h>
#include <stdlib.h>
#define SIZE 10
int main(int argc, char *argv[]) {
int a[SIZE],i,j;
for(i=0;i<SIZE;i++)
a[i]=1;
int t=0,c=0;
printf("出局人的序号依次是:\n");
for(i=0;c<SIZE-1;)
{
if(a[i]==1)
t++;// 计数
if(t==3)
{
a[i]=0;
c++; //出局个数
t=0;
printf("%d ",i); //出局人的序号
}
i++;
if(i==SIZE) //到最后一个人再继续循环
i=0;
}
printf("\n最后留下人的序号:\n");
for(i=0;i<SIZE;i++)
{
if(a[i]==1)
printf("%d",i); //最后一个留下的人序号
}
return 0;
}
结果: