/*
耶稣有13个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈, 从第一个开始报号:1,2,3,1,2,3...。凡是报到“3”就退出圈子,最后留在圈子内的人就 是出卖耶稣的叛徒。请找出它原来的序号。
*/
耶稣有13个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈, 从第一个开始报号:1,2,3,1,2,3...。凡是报到“3”就退出圈子,最后留在圈子内的人就 是出卖耶稣的叛徒。请找出它原来的序号。
*/
#include <stdio.h>
int main(void) {
int number = 13 ;
int count = 0; // 计数
int i = 0; // 第i - 1个人
int a[] = {1,2,3,4,5,6,7,8,9,10,11,12,13};
while(number > 1){
if(a[i] != 0){ // 如果这个这个人不为零 即没有被踢出去 则计数器+1
count++;
}
if(count == 3){ // 如果计数器满3 则置该位计数器为0 即踢出去该为的人,总人数-1
a[i] = 0;
number--;
count = 0;
}
i++;
if(i == 13){ // 到达第13个人则跳到第一个人
i = 0;
}
}
for(int i = 0; i < 13 ;i++){ // 没有没被置零的那位就是叛徒
if(a[i] != 0){
printf("叛徒是第%d个人",a[i]);
}
}
return 0;
}