测试题中抽到用1,2,3,1,2,3报数排除法找出出卖耶稣的门徒,思路分析是重点,下面我详细的分析下,供大家参考,要是有上面可以改进的地方,希望大家多多回复和交流。
1,定义一个数组对耶稣门徒进行编号
2,进行报数没有人退出时进行计数
3,当报数到3时,退出的人记为0,计数清零
4,当循环报数剩下的人计数无法再清零,那个人则为出卖耶稣的门徒。
#include <stdio.h>
#define N 15
int main ()
{
int a[15];
for (int i=0;i<15;i++) //给门徒进行编号
{
a=i+1;
}
int number = 15; //记录当前人数
int count = 0; //记录报数
i = 0;
while (number > 1) //直到一人时退出循环
{
if (a != 0) //没有人被剔除掉,报数有效
{
count++;
}
if (count == 3) //当有人报数为3时,退出的人计为0,报数清零,存活人数减1
{
a = 0;
count = 0;
number--;
}
i++; //记录报数的下一个人
if (i == 15) //当15人报数完毕,立即将报数人数置为第一人
{
i = 0;
}
}
for ( i = 0; i< 15; i++)
{
if (a > 0) //最后剩下的报数不能置0的人即为叛徒
printf("出卖耶稣的人是第%d个门徒", a);
|
|