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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我算出来是 92人 不知道对不对:P

:)

14 个回复

倒序浏览
  1. public class Test10 {

  2.        
  3.         public static void main(String[] args) {
  4.                
  5.                 ArrayList<String>  al = new ArrayList<String>();
  6.                
  7.                 for(int x=1;x<=100;x++)
  8.                 {
  9.                         al.add("第"+x+"人");
  10.                        
  11.                 }
  12.                
  13.                 System.out.println(al);
  14.                
  15.                
  16.                 int num = 1;
  17.                
  18.                 while(al.size()!=1)
  19.                 {
  20.                        
  21.                         ListIterator<String> li = al.listIterator();
  22.                         while(li.hasNext())
  23.                         {
  24.                                 li.next();
  25.                                
  26.                                 if(num==14)
  27.                                 {
  28.                                         li.remove();
  29.                                         num=1;
  30.                                         continue;
  31.                                 }
  32.                                
  33.                                 num++;
  34.                         }
  35.                
  36.                 }
  37.                
  38.                
  39.                 System.out.println(al);
  40.                
  41.                
  42.                
  43.         }
  44.        
  45.        
  46.        

  47.        
  48.        
  49.        
  50. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
这是约瑟夫环问题、恭喜你算对了
回复 使用道具 举报
  1. import java.util.ArrayList;

  2. /*
  3. * 有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。
  4. * 然后其他人重新开始,从1报数,到14退出。
  5. * 问:最后剩下的是100人中的第几个人?
  6. */

  7. public class Test5 {

  8.         public static void main(String[] args) {
  9.                
  10.                 int number = countLast(100,14);
  11.                
  12.                 System.out.println("The last one is:"+number);
  13.         }

  14.         private static int countLast(int total, int count) {
  15.                
  16.                 ArrayList<Integer> list = new ArrayList<Integer>();
  17.                 for(int i = 1;i<=total;i++)
  18.                 {
  19.                         list.add(i);
  20.                 }
  21.                 //System.out.println(list);
  22.                 int index = 0;
  23.                 while(list.size()!=1)
  24.                 {
  25.                         index = (index+(count-1))%list.size();
  26.                         System.out.print("删除"+list.get(index)+"\t");
  27.                         System.out.println(" size:"+list.size());
  28.                         list.remove(index);
  29.                 }
  30.                
  31.                 return list.get(0);
  32.         }

  33. }
复制代码


我的结果也是第92个,应该是正确的。
回复 使用道具 举报
裙下之臣 发表于 2014-12-19 18:55
这是约瑟夫环问题、恭喜你算对了

- - 想了个半小时   :)   幸好没错   
回复 使用道具 举报
huoxy 发表于 2014-12-19 19:07
我的结果也是第92个,应该是正确的。

谢谢 :lol
回复 使用道具 举报
DamonZh 中级黑马 2014-12-19 19:21:49
7#
可以用5个或者10个人 手动测试下 然后和程序的值进行对比
回复 使用道具 举报
正确,这道题我也做过。
回复 使用道具 举报
godmmm 高级黑马 2014-12-19 20:03:02
9#
本帖最后由 godmmm 于 2014-12-19 20:04 编辑

恭喜你对了,只操作角标也行,省略了迭代,就是容易错。
  1. import java.util.*;
  2. public class CountOff {
  3.         public static void main(String[] args) {
  4.                 countOff(14);
  5.         }
  6.         private static void countOff(int i) {
  7.                 List<String> list=new ArrayList<String>();
  8.                 int num=1;
  9.                 for(int x=1;x<=100;x++)
  10.                 {
  11.                         list.add("第"+x+"人");
  12.                 }
  13.                 while(list.size()>1)
  14.                 {
  15.                         for(int x=0;x<list.size();x++)
  16.                         {
  17.                                 if(num==14)
  18.                                 {
  19.                                         System.out.println(list.remove(x));
  20.                                         x=x-1;
  21.                                         num=1;
  22.                                         continue;
  23.                                 }
  24.                                 num++;
  25.                         }
  26.                 }
  27.                 System.out.println(list);
  28.         }
  29. }
复制代码



回复 使用道具 举报
看看我的帖子吧。。
回复 使用道具 举报
Rain2692 发表于 2014-12-19 20:05
看看我的帖子吧。。

恩恩  :P
回复 使用道具 举报
冥夜 中级黑马 2014-12-19 22:49:44
12#
楼主写的很好啊。。我当时写的比这个复杂做了。。用数组做的。把第几人直接作为属性保存进集合的思路真是太棒了
回复 使用道具 举报
冥夜 发表于 2014-12-19 22:49
楼主写的很好啊。。我当时写的比这个复杂做了。。用数组做的。把第几人直接作为属性保存进集合的思路真是太 ...

嘻嘻   :P  你都过面试了   我还在准备呢,羡慕
回复 使用道具 举报
学无止境啊
回复 使用道具 举报
学习了,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马