黑马程序员技术交流社区
标题:
看基础测试有道耶稣的题, 大家来看看我的代码能不能继续...
[打印本页]
作者:
cui0wei0
时间:
2015-5-7 23:51
标题:
看基础测试有道耶稣的题, 大家来看看我的代码能不能继续...
本帖最后由 cui0wei0 于 2015-5-8 00:01 编辑
耶稣有15个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:15人围坐一圈,从第一个开始报号:1,2,3,1,2,3……,凡是报到“3”就退出圈子,最后留在圈内的人就是出卖耶稣的叛徒,请找出它原来的序号。
#include <stdio.h>
const int NUM_OF_PERSON = 15;//定义人数常量为15
//定义一个方法,传入数组参数
int findTheSurvivor(int *person,int *remain)
{
int count = 0;//定义一个计数器并初始化为0
while (*remain > 1)//当只剩1人游戏结束
{
for (int i = 0; i < 15; i++)
printf("%3d\t", person);//显示所有人的状态
puts("");//换行
for (int i = 0; i < NUM_OF_PERSON; i++)
{
//如果遇上被剔除的人,循环重新开始,但是计数器没有自增
if (person == 0) continue;
count ++;//计数,开始时是1
if (count % 3 == 0)//如果能被3整除
{
person = 0;//剔除这个人
*remain -= 1;//剩下的人数-1
//count=0;//计数可重新开始,也可不重置
}
}
}
int j = 0;
for (j = 0; j < 15; j++)
{
printf("%3d\t",person[j]);
if (person[j] != 0) break;//找到不是0的那个人
}
return j+1;//个数是数组下标+1
}
int main()
{
// insert code here...
int person[NUM_OF_PERSON];//创建一个person数组
int remain = NUM_OF_PERSON;//剩下的人数,初始为15
for (int i = 0; i < 15; i++)//数组初始化
{
person = i + 1;
}
int n = findTheSurvivor(person,&remain);//调用方法
printf("\n\t叛徒是第%d个",n);
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2