/*
10、 耶稣有15个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:15人围坐一圈,从第一个开始报号:1,2,3,1,2,3……,凡是报到“3”就退出圈子,最后留在圈内的人就是出卖耶稣的叛徒,请找出它原来的序号。(C语言)
1.定义一个15人数组,并初始化,用于保存15名门徒
2.循环报数 总数到15重新开始报数 直到剩下最后1个叛徒
3.标记报3的门徒,然后重新开始从1报数,统计剩余人数
4.遍历数组,打印非0的元素
*/
#include <stdio.h>
#define M 15 //M人数,N报号退出的数字
#define N 3
int main(int argc, const char * argv[]){
int arr[M];
for(int i = 0;i< M;i++) { //for循环赋值
arr[i]=i+1;
}
int total = M,count= 0,j = 0;
while (total != 1) { //留下坏人
if (arr[j] != 0) count++;
if (count == N) {
arr[j] = 0; //排除好人 赋值0
count = 0; //重置计数器,重新报号
total--; //总人数减1
}
j++;
if (j == M) j = 0; //下一轮报号
}
for (int i = 0; i< M; i ++) {
if (arr[i] != 0) printf("出卖耶稣叛徒的序号:%d\n",arr[i]);
}
printf("The end!\n");
return 0;
} |