您的位置:首页 > 编程语言 > C语言/C++

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

2014-07-29 09:05 127 查看
<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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐