A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

耶稣有13个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,从第一个开始报号:1,2,3,1,2,3...。凡是报到“3”就退出圈子,最后留在圈子内的人就是出卖耶稣的叛徒。请找出它原来的序号。  求此题答案

3 个回复

倒序浏览
去我发的帖子里找一下,基础测试第十题
回复 使用道具 举报
这题不错值得研究一下...
回复 使用道具 举报
/*
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;
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马