黑马程序员技术交流社区

标题: 分享一道基础测试题,感觉好难~~ [打印本页]

作者: 长厢厮守℡    时间: 2015-12-5 11:10
标题: 分享一道基础测试题,感觉好难~~
耶稣有15个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:15人围坐一圈,从第一个开始报号:1,2,3,1,2,3……,凡是报到“3”就退出圈子,最后留在圈内的人就是出卖耶稣的叛徒,请找出它原来的序号。
求大神给点思路,代码我自己敲~~
感激不尽!!
作者: Flowerkanzhe    时间: 2015-12-5 12:24
#import <Foundation/Foundation.h>
//定义宏
#define N 15
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //定义报数
        int j = 0;
        //用于存放当前还有几个门徒编号不为0
        int num = N ;
        //用于存放叛徒编号
        int result;
        //用于存放15个门徒的编号
        int a[N];
        //通过循环给数组赋值
        for (int i = 1; i <= N; i++)
            a[i-1]= i;
        //当叛徒还没有找到时就继续执行
        while (num != 1){
            //遍历门徒
            for (int i = 0; i < N; i++)
                //如果门徒编号部位零,则报数
                if (a[i]!= 0){
                    //报数加一
                    j++;
                    //如果门徒报数为3,则将门徒的编号置0,同时将还剩下的门徒减一,并初始化报数
                    if (j % 3 == 0){
                        a[i] = 0;
                        num --;
                        j = 0;
                    }
                }
        }
        //寻找叛徒的编号
        for (j = 0; j < N; j++)
            if (a[j] != 0){
                result = a[j];
                break;
            }
        //输出判读的编号
        printf("%d\n",result);
    }
    return 0;
}

作者: 长厢厮守℡    时间: 2015-12-5 13:33
Flowerkanzhe 发表于 2015-12-5 12:24
#import
//定义宏
#define N 15

感谢感谢,我研究研究
作者: yll    时间: 2015-12-5 13:42
学习一下~~
作者: cbl16888    时间: 2015-12-5 22:19
正好自己也可以做一下
作者: fuyao1992    时间: 2015-12-5 22:20
黑马就是不一样,赞!
作者: 沐小妖mavs    时间: 2015-12-5 23:33
利用1,0的思想,先设定一个数组里面15个元素是0,在设定一个变量(这个变量代表从第一个人开始报数,1,2,3这样)然后利用循环判断,当这个数等于3的时候,给这个数组里面的元素赋予一个值,然后剔除除去,总人数在加1.保持这个循环,循环14次,这样未赋值的那个就是判断。在用一个循环便利,当叛徒是0就打印出来
作者: 梦想家Eva    时间: 2015-12-5 23:34
好难啊!!!
作者: 、Z    时间: 2015-12-6 00:03
这个考虑到算法.
作者: iOS-lye    时间: 2015-12-6 00:06
好像不会做
作者: 长厢厮守℡    时间: 2015-12-6 11:58
沐小妖mavs 发表于 2015-12-5 23:33
利用1,0的思想,先设定一个数组里面15个元素是0,在设定一个变量(这个变量代表从第一个人开始报数,1,2 ...

嗯,好像有点明白了 我去敲一下。谢谢
作者: 15931110616    时间: 2015-12-6 12:04
我也抽到这个题 , 确实不会
作者: ff774411    时间: 2015-12-6 16:49
用两个计数器,一个用来统计没死的人  ,一个用来计算1 2 3 ,当剩余人数为1时 就可以 输出了
作者: qu29437    时间: 2015-12-6 21:01
好好学习,天天向上,加油!
作者: AGHM0312    时间: 2015-12-6 21:44
还没做过,赞一个
作者: 后知后觉4778    时间: 2015-12-6 21:53
首先用到一个长度为15的数组(注意数组下标从0开始 和序号差1)然后各个数组元素原来的值都是1表示在圈子中,然后进入循环,设置一个计数变量用于存储推出圈子的人数(循环结束的条件是n大于等于14,即还剩下最后一个人,注意在循环中数组可能不止遍历一遍)循环结束后遍历数组,找出值为1的数组元素的下标,然后加1即可
作者: 后知后觉4778    时间: 2015-12-6 21:58
忘了说了 循环里面有一个计数变量,判断是3的话修改数组元素的值,然后计数变为0
作者: ws541729321    时间: 2015-12-6 22:28
确实好难!
作者: 重拾辉煌    时间: 2015-12-6 22:31
这是入学黑马的测试题,感觉好难啊,一时半会真搞不出来。
作者: 唯有繁星    时间: 2015-12-6 22:43
赞!!!!!!!!!!!!!!!!!!!!

作者: xianglin123    时间: 2015-12-6 22:44
有意思啊
作者: chensc    时间: 2015-12-7 21:58
学习学习!
作者: 能不能行    时间: 2015-12-7 22:54
经典题啊.有点难度




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