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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

我的解法是:
  1. #include<stdio.h>
  2. int main()
  3. {
  4.   int stu[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
  5.   int left=15;
  6.   int j=0;
  7.   for(int count=1;left>1;count++)
  8. {
  9.    while(stu[j]==0)      //剔除出局的人,找出下一个被数的人
  10.    {
  11.      j++;
  12.      if(j==15)
  13.      j=0;
  14.     }
  15.    if(j==15)           //防止数组下标溢出
  16.       j=0;
  17.                
  18.    if(count==3)         //使被数到3的人出局
  19.    {
  20.      stu[j]=0;
  21.      count=0;       
  22.      left--;
  23.    }
  24.    j++;              //下一个
  25.         }
  26.         for(int i=0;i<15;i++)
  27.         {
  28. if(stu[i]!=0)
  29. printf("The badguy is number %d\n",i+1);
  30.         }
  31.         return 0;
  32. }
复制代码

总觉得这么解有点笨 请大神指导下更简便一点的方法


1 个回复

倒序浏览
我也是来学习的,望大神 讲解
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马