C语言面试题-----耶稣问题

   <span style="font-size:18px;"> //   耶稣有13个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,从第一个开始报号:1,2,3,1,2,3...。凡是报到“3”就退出圈子,最后留在圈子内的人就是出卖耶稣的叛徒。请找出它原来的序号。
    //解题思路:
    //(1)如何表示13个人?  通过数组表示,有13个元素,赋初值是,可以赋值为1~13;
    //(2)如何描述报数?    使用count值统计当前是第几个人?
    //(3)如何将人踢出,标示已经死掉的人?   将元素的值置为0.
    //(4)如何及时获取当前活着的人?变量number用来记录当前活着的人
    //(5)使用哪种循环结构? 采用while
    //(6)循环条件是什么?当前活着的人数大于1
    //1. number > 1
    //(7)如何循环报数? 循环变量 i,记录当前第几个在报数,如果到最后一个人,报数完成之后,让第一个人继续报数,i=0.
    int a[13] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
    int count = 0;//用来记录报数
    int number = 13; //用来记录活着的人;
    int i = 0;//记录第几个人正在报数
    while (number > 1) {
        //如果a[i],没有被剔除掉,报数有效
        if (a[i] != 0) {
            count++;
        }
        if (count == 3) {
            a[i] = 0;//剔除掉,game over
            number--;//存活人数及时更新
            count = 0;//将计数器清零.
        }
        i++;//记录报数的下一个人
        if (i == 13) {
            i = 0;//当超出报数的范围时,立即将报数人置为第一个人.
        }
    }
    for (int i = 0;  i < 13; i++) {
        if (a[i] > 0) {
            printf("%d", a[i]);
        }
    }
</span>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值