黑马程序员技术交流社区

标题: 基础测试-分享一题 [打印本页]

作者: m__dd    时间: 2015-2-4 20:14
标题: 基础测试-分享一题
题目:耶稣有15个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:15人围坐一圈,从第一个开始报号:1,2,3,1,2,3……,凡是报到“3”就退出圈子,最后留在圈内的人就是出卖耶稣的叛徒,请找出它原来的序号。(C语言)

实现代码(仅供参考):


/***********************************************************************
**m总人数,则标号为0~m-1   n为要数的数
**成功返回序号,失败返回-1
***********************************************************************/
int find_badman(int m, int n)
{
    int i;
    int badman;
    if (m <= 0 || n <= 0) {
        return -1;
    }
    badman = 0;                        /* 当只有一个人时,编号为0的出圈 */
    for (i = 2;i <= m;i++) {           /* 循环num-1次将剩下一个人       */
        badman = (badman + n % i) % i; /* 这样写易理解,或(badman+n)%i  */
    }
    return badman + 1;                 /* 程序从0编号,返回时应+1       */
}




作者: 奔跑的蜗牛GO    时间: 2015-2-5 22:42
我上大一的时候考试过这一题
作者: Potter    时间: 2015-2-5 23:23
和我的一样,可惜我不会做
作者: love$$-IT    时间: 2015-2-5 23:51
我怎么没碰到了!
作者: 张洪丽    时间: 2015-2-6 02:57
问一下 你的这个程序是正确的嘛?
作者: m__dd    时间: 2015-2-6 10:23
张洪丽 发表于 2015-2-6 02:57
问一下 你的这个程序是正确的嘛?

都贴出来了  当然正确了  不过还有其他方法,比如递归    或者加一些判断,减少时间复杂度等等
作者: 张洪丽    时间: 2015-2-6 12:49
m__dd 发表于 2015-2-6 10:23
都贴出来了  当然正确了  不过还有其他方法,比如递归    或者加一些判断,减少时间复杂度等等 ...

问没看懂 所以就问一下啦  大神能给讲解一下嘛?
作者: 余永健    时间: 2015-2-6 13:18
请问是什么语言的代码?{:3_66:}
作者: m__dd    时间: 2015-2-6 13:44
余永健 发表于 2015-2-6 13:18
请问是什么语言的代码?

这段代码 C C++ OC均可以




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