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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 付博 中级黑马   /  2014-11-12 19:43  /  1783 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


  1. import java.util.*;

  2. /**
  3. *10、 有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
  4. *  
  5. * @author
  6. */  
  7. /*
  8.   *
  9. */
  10. public class Test10 {
  11.     public static void main(String[] args){  
  12.             ArrayList<Integer> al = new ArrayList<Integer>(100);
  13.             ArrayList<Integer> del = new ArrayList<Integer>(100);
  14.             int count = 0;
  15.             for(int x=1;x<101;x++){
  16.                     al.add(x);
  17.             }
  18.             for(int y=0;y<=al.size();y++){
  19.                     if(y == al.size()){
  20.                             y = 0;
  21.                     }
  22.                     count++;
  23.                     if(count == 14){
  24.                             del.add(al.remove(y));
  25.                             count = 0;
  26.                     }
  27.             }
  28.             Iterator<Integer> it = del.iterator();
  29.             while(it.hasNext()){
  30.                     System.out.println(it.next());
  31.             }
  32.     }  
  33. }  
复制代码

这道题我还没有做完,以上是我的代码,打印结果显示只删除了13个元素,为什么删了13个就停了,弄了一下午都没弄明白。哪位大神来帮帮忙。

12 个回复

倒序浏览
在线等!
回复 使用道具 举报
  1. public class Test10 {

  2.          /**
  3.           * 10、 有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。
  4.          * 然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
  5.          */
  6.          public static void main(String[] args) {               
  7.                  int s = 0;
  8.                  int m = 14;
  9.                  for(int i=1; i<=100; i++) {
  10.                  s = (s+m)%i;
  11.                  }
  12.                  System.out.println("最后一个留下来的人是:" + (s+1));
  13.          }
  14. }
复制代码

看见有人这么做的,不过没看懂。。
回复 使用道具 举报
我可以给你说一下思路,你自己做一下,这道题很简单的,别想的太复杂了
思路:
1.定义两个集合容器,集合1里面添加1-100的元素对象。另一个集合2空着。
2.遍历有元素的集合1,定义一个记录,累加达到14,则把该元素添加入另一个集合2中。
3.记录器的判断,如果集合2已经存在该元素,则记录器不累加。
4.不断循环遍历有元素的集合1,直到另外一个集合2达到99个元素为止。
5.集合1中有100个元素,集合2中有99个元素,去除相同元素后,剩下的则为答案结果。
回复 使用道具 举报
陈永赛 发表于 2014-11-18 03:32
我可以给你说一下思路,你自己做一下,这道题很简单的,别想的太复杂了
思路:
1.定义两个集合容器,集合1 ...

看来思路很重要。看明白了,谢谢了哈
回复 使用道具 举报
这题的答案是什么?报到14才退出,不应该是剩13个人吗?
回复 使用道具 举报
这题是入学测试题?
回复 使用道具 举报
陈永赛 发表于 2014-11-18 03:32
我可以给你说一下思路,你自己做一下,这道题很简单的,别想的太复杂了
思路:
1.定义两个集合容器,集合1 ...

把 条件设置为 人数不等于1 然后一直循环。
直接把人删除不是也可以?
回复 使用道具 举报
qq8921310 发表于 2014-11-27 23:32
把 条件设置为 人数不等于1 然后一直循环。
直接把人删除不是也可以?

我这样做,只是让代码看起来简单,容易理解。按照你的说法同样是可以的,而且效率会高,但得注意删除元素后的集合与原集合之间的关系。
回复 使用道具 举报
qq8921310 发表于 2014-11-27 23:32
把 条件设置为 人数不等于1 然后一直循环。
直接把人删除不是也可以?

我这样做,只是让代码看起来简单,容易理解。按照你的说法同样是可以的,而且效率会高,但得注意删除元素后的集合与原集合之间的关系。
回复 使用道具 举报
好深奥的感觉
回复 使用道具 举报
又见约瑟夫问题。
回复 使用道具 举报
学习学习!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马