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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© disgusting 中级黑马   /  2014-6-16 00:47  /  1625 人查看  /  10 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

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

10 个回复

倒序浏览
本帖最后由 ゞ导火索゛ 于 2014-6-16 22:45 编辑
  1. <div class="blockcode"><blockquote>/*
  2. * 1、定义一个长度为15的布尔型数组,初始化为true
  3. * 2、定义一个计数器count=15,当count=1时,就是最后一个人
  4. * 3、循环判断,循化条件count>1;
  5. * 4、数组下标为index,判断当index=15;重新设置index=0;
  6. * 5、并用flag=1,作为每三个的循环
  7. */
  8. public class Demo2 {
  9.         public static void main(String[] args)
  10.         {
  11.                 boolean[] person = new boolean[15];
  12.                 for(int i=0; i<15;i++)
  13.                         person[i]=true;
  14.                
  15.                 int count=15;
  16.                 int index = 0;
  17.                 int flag = 0;
  18.                
  19.                 while(count>1)
  20.                 {
  21.                         if(index==15)
  22.                                 index=0;
  23.                         //person[index]==true表示还没有退出
  24.                         if(person[index]==true)
  25.                         {
  26.                                 flag++;
  27.                         }

  28.                         if(flag==3)
  29.                         {
  30.                                 flag=0;
  31.                                 person[index] = false;
  32.                                 count--;       
  33.                         }
  34.                         index++;               
  35.                 }
  36.                
  37.                 //现在数组中只有一个元素的值为true,遍历找出来
  38.                 for(int i=0; i<15; i++)
  39.                 {
  40.                         if(person[i]==true)
  41.                         {
  42.                                 System.out.println(i);
  43.                                 break;
  44.                         }
  45.                 }

  46.         }
  47. }
复制代码

//才发现昨天没有写完整,现在补齐,不好意思了

点评

大神这是C语言吗??  发表于 2014-6-16 08:31
回复 使用道具 举报
可以用循环链表实现
这其实就是约瑟夫问题,只是换了个问法而已
  1. #include "stdafx.h"
  2. #include <iostream>
  3. using namespace std;
  4. int   pantu(int  n,int m)
  5. {
  6.         int  i, r=0;
  7.         for ( i=2; i<=n; i++)
  8.         {
  9.                 r=(r + m) % i;
  10.         }
  11.         return  r + 1;
  12. }
  13. void main()
  14. {       
  15.         int a[13];
  16.         int i, k;
  17.         for( i=0; i<13; i++)
  18.         {
  19.                 a[i] = i;
  20.         }               
  21.         k = pantu( 13, 3);
  22.         printf("%d",k);
  23.         system("pause");
  24. }
复制代码
回复 使用道具 举报
:D基础测试,第10题,做出来对你提升很大的。
回复 使用道具 举报
无尽可能 发表于 2014-6-16 14:23
基础测试,第10题,做出来对你提升很大的。

好,我会努力钻研的。
回复 使用道具 举报

写的很好可是我不懂JAVA啊 可以用C吗
回复 使用道具 举报
本帖最后由 ゞ导火索゛ 于 2014-6-16 22:48 编辑
disgusting 发表于 2014-6-16 22:05
写的很好可是我不懂JAVA啊 可以用C吗

你就把main函数copy到C中的main函数就可以了吧,语法问题可能就数组定义和输出语句改一下就好了,还有昨天那java版的没有写完整,现在改过来了
回复 使用道具 举报
楼主百度下 :约瑟夫环,理解下数学过程即可
回复 使用道具 举报
邱蚓 中级黑马 2014-6-16 22:40:20
9#
好高深,又进步了一点点
回复 使用道具 举报
张宇清 发表于 2014-6-16 14:02
可以用循环链表实现
这其实就是约瑟夫问题,只是换了个问法而已

代码没错 能讲解一下吗
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马