A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马