黑马程序员技术交流社区

标题: 看基础测试有道耶稣的题, 大家来看看我的代码能不能继续... [打印本页]

作者: cui0wei0    时间: 2015-5-7 23:51
标题: 看基础测试有道耶稣的题, 大家来看看我的代码能不能继续...
本帖最后由 cui0wei0 于 2015-5-8 00:01 编辑

耶稣有15个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:15人围坐一圈,从第一个开始报号:1,2,3,1,2,3……,凡是报到“3”就退出圈子,最后留在圈内的人就是出卖耶稣的叛徒,请找出它原来的序号。

  1. #include <stdio.h>
  2. const int NUM_OF_PERSON = 15;//定义人数常量为15
  3. //定义一个方法,传入数组参数
  4. int findTheSurvivor(int *person,int *remain)
  5. {
  6.    
  7.     int count = 0;//定义一个计数器并初始化为0
  8.     while (*remain > 1)//当只剩1人游戏结束
  9.     {
  10.         for (int i = 0; i < 15; i++)
  11.             printf("%3d\t", person);//显示所有人的状态
  12.         puts("");//换行
  13.         
  14.         for (int i = 0; i < NUM_OF_PERSON; i++)
  15.         {
  16.             //如果遇上被剔除的人,循环重新开始,但是计数器没有自增
  17.             if (person == 0) continue;
  18.             
  19.             count ++;//计数,开始时是1
  20.             if (count % 3 == 0)//如果能被3整除
  21.             {
  22.                 person = 0;//剔除这个人
  23.                 *remain -= 1;//剩下的人数-1
  24.                 //count=0;//计数可重新开始,也可不重置
  25.             }
  26.         }
  27.     }
  28.     int j = 0;
  29.     for (j = 0; j < 15; j++)
  30.     {
  31.         printf("%3d\t",person[j]);
  32.         if (person[j] != 0) break;//找到不是0的那个人
  33.     }
  34.     return j+1;//个数是数组下标+1
  35. }

  36. int main()
  37. {
  38.     // insert code here...
  39.     int person[NUM_OF_PERSON];//创建一个person数组
  40.     int remain = NUM_OF_PERSON;//剩下的人数,初始为15
  41.     for (int i = 0; i < 15; i++)//数组初始化
  42.     {
  43.         person = i + 1;
  44.     }
  45.     int n = findTheSurvivor(person,&remain);//调用方法
  46.     printf("\n\t叛徒是第%d个",n);
  47. }
复制代码







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2