基础测试题:耶稣有15个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:15人围坐一圈,从第一个开始报号:1,2,3,1,2,3……,凡是报到“3”就退出圈子,最后留在圈内的人就是出卖耶稣的叛徒,请找出它原来的序号。(C语言)我的代码
#include"stdio.h"
main()
{
//自定义变量
char a[15];
int biaoji[15],i=0,b=1,shengyu=15;
//读入名字并初始化标记,1表示未剔除
printf("input the 15 names:\n");
for(i=0;i<15;i++)
{
scanf("%s",&a[i]);
biaoji[i]=1;
}
//不断剔除,直到仅剩一个
while(shengyu!=1)
{
for(i=1;i<15;i++)
{
if(biaoji[i]==1&&b!=3) b++;//未剔除,报数不是3,报数继续
else if(biaoji[i]==1&&b==3)//未剔除,报数为三,剔除,报数归1,剩余人数减一
{
biaoji[i]=0;
shengyu=shengyu-1;
b=1;
}
}
}
//输出结果,逐个验证,直到找出仅有的那个未剔除的编号
for(i=0;i<15;i++)
{
if(biaoji[i]==1)
printf(" number of the traitor is %dTH %s ",i,a[i]);
}
return 0;
} |