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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Lbabywei1988 中级黑马   /  2015-3-10 16:16  /  1877 人查看  /  20 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

20 个回复

倒序浏览
用什么语言写的?如果用面向对象的思维就很好做。c语言就要想下算法了
回复 使用道具 举报
int main()
{
        int sz[16];
        int i, j, count;
        for(i = 1; i < 16; i++)
                sz[i] = 1;

        i = 1;
        j = 1;
        count = 0;
        while(1)
        {
                if(i == 16) i = 1;

                while(sz[i] == 0)
                {
                        i++;
                        if(i == 16) i = 1;
                }
               
                if(j == 3)
                {
                        sz[i] = 0;
                        j = 0;
                        count++;
                        printf("%d\t", i);

                        if(count == 14)
                                break;
                }
                j++;
                i++;
        }

        for(i = 1; i < 16; i++)
        {
                if(sz[i] != 0)
                {
                        printf("\nThe last one is %d\n", i);
                        break;
                }
        }


        return 0;
}

回复 使用道具 举报
这个最精简:
  1. #include <stdio.h>

  2. int getAge(int i)
  3. {
  4.         if(i < 1) return -1;
  5.         if(1 == i) return 10;
  6.         return 3 + getAge(i-1);
  7. }

  8. int main()
  9. {
  10.         printf("%d",getAge(8));
  11.         return 0;
复制代码
回复 使用道具 举报
不好意思我粘贴错了那是第9题的,下面是这题的代码:
  1. #include <stdio.h>

  2. int notYouda(int N)
  3. //在剩下的N个人中数3
  4. {
  5.         if(N == 1) return 0;
  6.         else return ((notYouda(N-1))+3)%N;
  7. }

  8. int main()
  9. {
  10.         printf("%d",notYouda(15) + 1);       
  11.         return 0;
  12. }
复制代码
回复 使用道具 举报
上面是红颜妹子写的这个是我的思路:
  1. #include <stdio.h>

  2. int main ()
  3. {
  4.         static int person[15]; // 标记15个人
  5.         int n = 15; // 存剩余人数
  6.     int i = 1; // 标记报数的人
  7.         int j = 0; // 用于计算数组下标

  8.         while (n>1)
  9.         {
  10.                 if (person[j%15]==0 && i!=3)
  11.                 {
  12.                         i++;
  13.                 }
  14.                 else if (person[j%15]==0 && i==3)
  15.                 {
  16.                         i = 1; // 当报数为3时,初始化为1开始下次循环报数
  17.                         person[j%15] = 1; // 把报数为3的人都标记为1
  18.                         n--; // 剩余人数减一
  19.                 }
  20.                 j++;
  21.         }
  22. for (i=0; i<15; i++)
  23. {
  24.          if (person[i]==0)
  25.          {
  26.                  printf ("这个叛徒是%d\n",i+1);
  27.          }
  28. }

  29.         return 0;
  30. }
复制代码
回复 使用道具 举报
红颜妹子写的最精简所以拿来参考下
回复 使用道具 举报
自己想出来才是王道,靠别人就算拿到分了学的也累,真心的
回复 使用道具 举报
夏皮冬絺 发表于 2015-3-10 17:21
自己想出来才是王道,靠别人就算拿到分了学的也累,真心的

x下面就是我自己写的,你们没看到吗
回复 使用道具 举报
现在完全写不出来,也看不懂,怎么办?
回复 使用道具 举报
抽到的题目一样。
回复 使用道具 举报
喧闹的世界 发表于 2015-3-10 16:23
用什么语言写的?如果用面向对象的思维就很好做。c语言就要想下算法了

得用C来写
回复 使用道具 举报
xiezhongmin 发表于 2015-3-10 17:03
不好意思我粘贴错了那是第9题的,下面是这题的代码:

为什么 都这么牛?!!
回复 使用道具 举报
xiezhongmin 发表于 2015-3-10 17:07
上面是红颜妹子写的这个是我的思路:

灰常感谢
回复 使用道具 举报
夏皮冬絺 发表于 2015-3-10 17:21
自己想出来才是王道,靠别人就算拿到分了学的也累,真心的

哥们儿 ,这道理我懂,就是我想了很久都没想出了,不得已才问问各位大神的
回复 使用道具 举报
futaoheima 发表于 2015-3-11 13:09
现在完全写不出来,也看不懂,怎么办?

努力吧。我跟你是一个级别的,跟他们这些大神没法比
回复 使用道具 举报
zuoxiaorui 发表于 2015-3-11 15:34
抽到的题目一样。

你会的吧!!看来都是大神级别的啊!
回复 使用道具 举报
好厉害啊!!!!!
回复 使用道具 举报
我还没写呢!!
回复 使用道具 举报
Lbabywei1988 发表于 2015-3-12 17:49
哥们儿 ,这道理我懂,就是我想了很久都没想出了,不得已才问问各位大神的 ...

恩恩加油吧~
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马