耶稣有13个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,
从第一个开始报号:1,2,3,1,2,3……,凡是报到“3”就退出圈子,最后留在圈内的人就是
出卖耶稣的叛徒,请找出它原来的序号。
int disciple[13] = {0};
int dis_num = 13;
for(int i=0;i<13;i++)disciple[i]=1;
int step = 0;
int position = 0;
while(dis_num)
{
if(disciple[position])
++step;//数一下然后进行判定
if(disciple[position] && 3 == step)//判定:如果有人并且数到三
{
disciple[position] = 0;//go
printf("%d ",position);
step = 0;//return 0 ...to 3
dis_num--;// num-1
}
position++;
if(13 == position)
position = 0;
}printf("\n");
输出:
2 5 8 11 1 6 10 3 9 4 0 7 12