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

来源:互联网 发布:iphone导入视频到mac 编辑:程序博客网 时间:2024/05/17 13:44
   <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 0
原创粉丝点击