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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

耶稣有15个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:15人围坐一圈,从第一个开始报号:1,2,3,1,2,3……,凡是报到“3”就退出圈子,最后留在圈内的人就是出卖耶稣的叛徒,请找出它原来的序号。
求大神给点思路,代码我自己敲~~
感激不尽!!

22 个回复

倒序浏览
#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;
}
回复 使用道具 举报
Flowerkanzhe 发表于 2015-12-5 12:24
#import
//定义宏
#define N 15

感谢感谢,我研究研究
回复 使用道具 举报
学习一下~~
回复 使用道具 举报
正好自己也可以做一下
回复 使用道具 举报
黑马就是不一样,赞!
回复 使用道具 举报
利用1,0的思想,先设定一个数组里面15个元素是0,在设定一个变量(这个变量代表从第一个人开始报数,1,2,3这样)然后利用循环判断,当这个数等于3的时候,给这个数组里面的元素赋予一个值,然后剔除除去,总人数在加1.保持这个循环,循环14次,这样未赋值的那个就是判断。在用一个循环便利,当叛徒是0就打印出来
回复 使用道具 举报
好难啊!!!
回复 使用道具 举报
、Z 中级黑马 2015-12-6 00:03:28
9#
这个考虑到算法.
回复 使用道具 举报
好像不会做
回复 使用道具 举报
沐小妖mavs 发表于 2015-12-5 23:33
利用1,0的思想,先设定一个数组里面15个元素是0,在设定一个变量(这个变量代表从第一个人开始报数,1,2 ...

嗯,好像有点明白了 我去敲一下。谢谢
回复 使用道具 举报
我也抽到这个题 , 确实不会
回复 使用道具 举报
用两个计数器,一个用来统计没死的人  ,一个用来计算1 2 3 ,当剩余人数为1时 就可以 输出了
回复 使用道具 举报
好好学习,天天向上,加油!
回复 使用道具 举报
还没做过,赞一个
回复 使用道具 举报
首先用到一个长度为15的数组(注意数组下标从0开始 和序号差1)然后各个数组元素原来的值都是1表示在圈子中,然后进入循环,设置一个计数变量用于存储推出圈子的人数(循环结束的条件是n大于等于14,即还剩下最后一个人,注意在循环中数组可能不止遍历一遍)循环结束后遍历数组,找出值为1的数组元素的下标,然后加1即可
回复 使用道具 举报
忘了说了 循环里面有一个计数变量,判断是3的话修改数组元素的值,然后计数变为0
回复 使用道具 举报
确实好难!
回复 使用道具 举报
这是入学黑马的测试题,感觉好难啊,一时半会真搞不出来。
回复 使用道具 举报
赞!!!!!!!!!!!!!!!!!!!!
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马