黑马程序员技术交流社区

标题: 问一道题目,给我点思路也行 [打印本页]

作者: disgusting    时间: 2014-6-16 00:47
标题: 问一道题目,给我点思路也行
/*耶稣有15个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:15人围坐一圈,从第一个开始报号:1,2,3,1,2,3……,凡是报到“3”就退出圈子,最后留在圈内的人就是出卖耶稣的叛徒,请找出它原来的序号*/


作者: ゞ导火索゛    时间: 2014-6-16 01:40
本帖最后由 ゞ导火索゛ 于 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. }
复制代码

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

作者: 张宇清    时间: 2014-6-16 14:02
可以用循环链表实现
这其实就是约瑟夫问题,只是换了个问法而已
  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. }
复制代码

作者: 无尽可能    时间: 2014-6-16 14:23
:D基础测试,第10题,做出来对你提升很大的。
作者: disgusting    时间: 2014-6-16 21:47
无尽可能 发表于 2014-6-16 14:23
基础测试,第10题,做出来对你提升很大的。

好,我会努力钻研的。
作者: disgusting    时间: 2014-6-16 22:05
ゞ导火索゛ 发表于 2014-6-16 01:40

写的很好可是我不懂JAVA啊 可以用C吗
作者: ゞ导火索゛    时间: 2014-6-16 22:14
本帖最后由 ゞ导火索゛ 于 2014-6-16 22:48 编辑
disgusting 发表于 2014-6-16 22:05
写的很好可是我不懂JAVA啊 可以用C吗

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

代码没错 能讲解一下吗




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