本帖最后由 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);
- }
复制代码
|
|