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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

18 个回复

倒序浏览
http://v.ku6.com/show/TXV_tn2WisSr2H2s4k7jEw...html
送你个视频,我全靠这视频才弄懂的。
虽然不是最优的方法,但确实讲的比较容易理解。
回复 使用道具 举报
定义一个数组.
加一个循环, 用剩余人数作控制条件,剩余人数为1的时候就结束.
报数可以用一个计数器,%3==0就把数组中的元素赋予特定的值, 比如0.
最后剩下的一个人不为0, 再找出下标+1就是第几个人.
应该结果是5
回复 使用道具 举报
#include<stdio.h>
int main()
{
int people[15] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int count = 0;//用来记录报数

int number = 15;//记录活着的人数

int i = 0;//记录第几个人正在报数

while (number > 1)
{
   
    if (people[i] != 0)
    {
        
        count++; //如果a[i ]没有被剔除掉,报数有效
        
    }
    if (count == 3)
    {
        
        people[i] = 0;//剔除掉,
        
        count = 0;//报数清零
        
        number--;//存活人数减一
        
    }
   
    i++;//记录报数的下一个人
   
    if (i == 15)
    {
        
        i = 0;// 当超出范围时,立即将报数人数置为第一人
        
    }
   
}
for (int i = 0; i < 15; i++)
{
   
    if (people[i] > 0)
    {
        
        printf("叛徒是第%d人 ", people[i]);
        
    }
   
}
   
}
可以仔细琢磨下 这种把人数存放数组的方法代码和思路都能通俗易懂
回复 使用道具 举报
主要还是思想
回复 使用道具 举报
这个是基础测试还是入学测试题啊
回复 使用道具 举报
仰望的繁华 发表于 2015-5-7 22:42
http://v.ku6.com/show/TXV_tn2WisSr2H2s4k7jEw...html
送你个视频,我全靠这视频才弄懂的。
虽然不是最优 ...

谢谢你啊  非常感谢
回复 使用道具 举报
ydy96315 发表于 2015-5-8 06:02
这个是基础测试还是入学测试题啊

这个是基础测试题, 没有思路
回复 使用道具 举报

谢谢 大神啊 我再研究研究
回复 使用道具 举报
定义一个数组,,给每个元素都赋值为0,,然后循环遍历这个数组,,知道剩下一个人,,其中,数到3,就给当前数组元素赋值为非0,(比如给1)然后报数归零,剩下的人数减一,,一次类推。
回复 使用道具 举报
感谢,这道题我也不会
回复 使用道具 举报
我看了看我也不会,我还是继续学习吧,楼主加你为好友啊
回复 使用道具 举报
我也抽到了这一题,做完了,给你看下详细的解题代码分析
回复 使用道具 举报
#include <stdio.h>
#define N 15
int main ()
{
int a[15];

for (int i=0;i<15;i++)             //给门徒进行编号

{
    a[i]=i+1;

}


int number = 15;                   //记录当前人数
int count = 0;                     //记录报数
i = 0;
while (number > 1)                 //直到一人时退出循环
{
if (a[i] != 0)                     //没有人被剔除掉,报数有效
{
   count++;
  }
if (count == 3)                   //当有人报数为3时,退出的人计为0,报数清零,存活人数减1
{
   a[i] = 0;
   count = 0;
   number--;
  }
   i++;                             //记录报数的下一个人
if (i == 15)                     //当15人报数完毕,立即将报数人数置为第一人
{
   
    i = 0;
  
  }

}
for ( i = 0; i< 15; i++)

{
  if (a[i] > 0)                    //最后剩下的报数不能置0的人即为叛徒
  
  printf("出卖耶稣的人是第%d个门徒", a[i]);
        
               
}
  
return 0;       

}
回复 使用道具 举报
仰望的繁华 发表于 2015-5-7 22:42
http://v.ku6.com/show/TXV_tn2WisSr2H2s4k7jEw...html
送你个视频,我全靠这视频才弄懂的。
虽然不是最优 ...

谢谢啦  非常感谢您的回复
回复 使用道具 举报
共同学习 感谢各位大神
回复 使用道具 举报
视频讲的不错啊。
回复 使用道具 举报
长知识了。
回复 使用道具 举报
楼主还遇到什么面试题了?
面试题总体感觉难度怎么样?
不能所有笔试题都和这道题一样难度吧?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马