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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© android_921 中级黑马   /  2015-11-25 22:24  /  4220 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5黑马币
  1. class Text036
  2. {
  3.         /*
  4.         有 100 个人围成一个圈,从 1 开始报数,报到 14 的这个人就要 退出。
  5.         */
  6.         public static void main(String[] args)
  7.         {
  8.                 int[] arr=new int[100];                                                                                                        //新建一个百位数组
  9.                 int n=0;                                                                                                                                        //游戏判断次数
  10.                 int count=0;                                                                                                                                //数组值累积和
  11.                 do{                                                                                                                                                        //进入循环                                                                                       
  12.                         for(int j=0;j<arr.length;j++){                                                                                        //数组按个循环
  13.                                         if(arr[j]==0){                                                                                                        //判断,数组默认为零
  14.                                                 n++;                                                                                                                //累加n,计算游戏判断次数
  15.                                                 if(n%14==0){                                                                                                //判断n能否被14整除
  16.                                                 arr[j]=1;                                                                                                        //整除,将数组改为一,以作区别;
  17.                                                 }
  18.                                         }
  19.                         }
  20.                         for(int i=0;i<arr.length;i++){                                                                                        //数组里面的值累计加用来判断是否达到跳出循环的条件
  21.                                 count+=arr[i];
  22.                         }
  23.                 }while(count<=99);                                                                                                                //countz值为99时跳出循环
  24.                 for(int i=0;i<arr.length;i++){                                                                                                //循环查找符合条件得数组,得到数组依旧为零的值的下标
  25.                         if(arr[i]==0){
  26.                         System.out.println(i);                                                                                                //打印输出下标,即为所需结果
  27.                         }
  28.                 }
  29.         }
  30. }
复制代码
看看哪里有错,为啥出不来想要的的结果,,,在线等

最佳答案

查看完整内容

要解这道题,首先这是一道有名的问题,约瑟夫问题: http://baike.baidu.com/view/213217.htm 其次,不要因为测试题就放那里不写了,人家没要求不能现学。 我当时解决的步骤, 1.查到循环链表解决这个问题,需要建立类,分别给上前后索引,(韩顺平坦克大战视频11集-约瑟夫问题给过循环链表解决) 2.看到别人的数组解决,就说两点吧,一是:循环体是谁?数组。循环几次?报数从1-14需要报99次二是:怎么让他头尾循环?%取模 这样基 ...

17 个回复

倒序浏览
要解这道题,首先这是一道有名的问题,约瑟夫问题:
http://baike.baidu.com/view/213217.htm
其次,不要因为测试题就放那里不写了,人家没要求不能现学。
我当时解决的步骤,
1.查到循环链表解决这个问题,需要建立类,分别给上前后索引,(韩顺平坦克大战视频11集-约瑟夫问题给过循环链表解决)
2.看到别人的数组解决,就说两点吧,一是:循环体是谁?数组。循环几次?报数从1-14需要报99次二是:怎么让他头尾循环?%取模
这样基本就没问题了
参考:http://bbs.itheima.com/forum.php?mod=viewthread&tid=147049#pid1018015
  1. /**10、 有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新
  2. *                         开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
  3. */
  4. public class Test10 {
  5.         public static void main(String[] args) {
  6.                 // TODO Auto-generated method stub
  7.                 int all = 100;                                                                                                                        // 共有100个人
  8.                 int number = 14;                                                                                                         // 报到14则退出
  9.                 int count = countGame(all,number);                // 开始游戏,设置变量count接收返回的剩下人的编号
  10.                 System.out.println("剩下的人是第"+count+"个。");
  11.         }

  12.         public static int countGame(int all,int number) {
  13.                 int count = all-1;                                                                        // 初始化人员编号,第一人编号为零,因为进入循环要先加一再判断,所以初始化为最后一人编号
  14.                 boolean[] flag = new boolean[all];                // 创建boolean数组存储所有人的状态,用默认状态false表示未退出,ture表示已经退出
  15.                 for(int i=0; i<all-1; i++){                                                // 外循环循环一次有一人退出,所以可得循环次数为all-1
  16.                         for(int j=0; j<number; j++){                        // j为每次报的数字
  17.                                 count++;                                                                // 检查下一个人,到达最后一人则循环
  18.                                 count%=all;
  19.                                 if(flag[count])                                                        // 如果下一个人已经退出,则报数未成功,不算数
  20.                                         j--;
  21.                         }
  22.                         flag[count]=true;                                        // 报到指定数字后内循环退出,则count为要退出人的编号,b[count]设为true表示此人已退出
  23.                 }
  24.                 for(int i=0;i<all;i++) {                                // 获取剩下人的编号
  25.                         if(!flag[i]){                                                                // 【注】:若将17行处for循环判断条件改为"i<all",则26~31行代码可以删除,但是程序运行效率会降低
  26.                                 count=i;
  27.                                 break;
  28.                         }
  29.                 }
  30.                 return count+1;                // 返回,因为返回的“第几个人”是从1开始计数,所以要加1
  31.         }
  32. }
复制代码


回复 使用道具 举报
你写的逻辑有问题
回复 使用道具 举报
如果想知道怎么做的,可以找我
回复 使用道具 举报
如何联系。。。?
回复 使用道具 举报

要用到循环链表的知识   才可以做的
回复 使用道具 举报
有明确自己要做什么
回复 使用道具 举报
年强 发表于 2015-11-26 10:36
要用到循环链表的知识   才可以做的

嘿嘿,搞出来喽,
回复 使用道具 举报
bbaijiajinger 发表于 2015-11-26 18:57
有明确自己要做什么

已解决,谢谢支持
回复 使用道具 举报
是上边的图片吗
回复 使用道具 举报
还是我谢谢你吧
回复 使用道具 举报

不客气,大家都是朋友
回复 使用道具 举报
学习了。
回复 使用道具 举报
这种解决问题的方法很好,大家可以一起解决
回复 使用道具 举报
冰雪丝阳 发表于 2015-11-29 09:36
这种解决问题的方法很好,大家可以一起解决

谢谢你的评价,我会努力的
回复 使用道具 举报
  1. class Text036 {
  2.         /*
  3.         有 100 个人围成一个圈,从 1 开始报数,报到 14 的这个人就要 退出。
  4.         */
  5.         public static void main(String[] args) {
  6.                 int[] arr=new int[100];                                                                                                        //新建一个百位数组
  7.                 int n=0;                                                                                                                                        //游戏判断次数
  8.                 int zong=0;                                                                                                                                //数组值累积和
  9.                 do{                                                                                                                                                        //进入循环                                                                                       
  10.                         for(int j=0;j<arr.length;j++){                                                                                        //数组按个循环
  11.                                         if(arr[j]==0){                                                                                                        //判断,数组默认为零
  12.                                                 n++;                                                                                                                //累加n,计算游戏判断次数
  13.                                                 if(n%14==0){                                                                                                //判断n能否被14整除
  14.                                                 arr[j]=1;                                                                                                        //整除,将数组改为一,以作区别;
  15.                                                 }
  16.                                         }
  17.                         }
  18.                         int count=0;
  19.                         for(int i=0;i<arr.length;i++){                                                                                        //数组里面的值累计加用来判断是否达到跳出循环的条件
  20.                                 count+=arr[i];
  21.                         }
  22.                                 zong=count;
  23.                 }while(zong<99);                                                                                                                //countz值为99时跳出循环
  24.                 for(int i=0;i<arr.length;i++){                                                                                                //循环查找符合条件得数组,得到数组依旧为零的值的下标
  25.                         if(arr[i]==0){
  26.                         System.out.println(i);                                                                                                //打印输出下标,即为所需结果
  27.                         }
  28.                 }
  29.         }
  30. }
复制代码

得结果为91,请诸位查看
回复 使用道具 举报
hyl 中级黑马 2015-12-6 23:28:35
17#
先确定要用循环。整理好思维。
回复 使用道具 举报
hyl 发表于 2015-12-6 23:28
先确定要用循环。整理好思维。

嗯,好的,谢谢支持
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马