黑马程序员技术交流社区

标题: 耶稣有13个门徒,其中有一个就是出卖耶稣的叛徒, [打印本页]

作者: 364827317    时间: 2015-11-16 23:36
标题: 耶稣有13个门徒,其中有一个就是出卖耶稣的叛徒,
耶稣有13个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,从第一个开始报号:1,2,3,1,2,3...。凡是报到“3”就退出圈子,最后留在圈子内的人就是出卖耶稣的叛徒。请找出它原来的序号。  求此题答案
作者: black747521    时间: 2015-11-17 00:27
去我发的帖子里找一下,基础测试第十题
作者: 流水落花    时间: 2015-11-17 00:45
这题不错值得研究一下...
作者: linexs    时间: 2015-11-17 13:19
/*
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;
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2