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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵太云   /  2013-7-19 09:05  /  6657 人查看  /  33 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这个题目的原题就是这个样子?还是我理解的太简单,为什么上面的各位仁兄说的那么复杂
回复 使用道具 举报
以前同学参加蓝桥杯初赛时问过我一个类似的问题,由于填空题,每天注意,只记得好像是用Vector来处理的。把它们看做一个循环队列,每报一个判断它是14吗?不是就将它接到队列的尾部,是就将它remove掉这样循环就能求出最后剩下的那个人啦
这只提供思路啦,如果有时间帮你写个程序啊
回复 使用道具 举报
水。。。海 发表于 2013-7-19 11:52
这个题目的原题就是这个样子?还是我理解的太简单,为什么上面的各位仁兄说的那么复杂 ...

这个题看起来是很简单,纯属就一算法,但你要用代码去实现相对就麻烦得多了
回复 使用道具 举报
傻瓜一点红 发表于 2013-7-19 12:06
这个题看起来是很简单,纯属就一算法,但你要用代码去实现相对就麻烦得多了 ...

但是照我的理解就是把14和它的倍数去掉就行了
回复 使用道具 举报
结果是  16.29.36.39.47.55.72.74.75.80.90.91.92我搞出来了
回复 使用道具 举报
水。。。海 发表于 2013-7-19 12:31
但是照我的理解就是把14和它的倍数去掉就行了

呵呵,你这样理解就错了,你这样得到的结果肯定是错的,当最后剩下的14个数时可能都不是14的倍数,但还得继续循环,就算剩下两个数的时候都还得继续用14来循环,直到只剩下一个数为止
回复 使用道具 举报
才看视频到 ArrayList的路过代码如下
  1. import java.util.*;
  2. class TopicDemo
  3. {
  4.         public static void main(String []arg)
  5.         {
  6.                 ArrayList first = new ArrayList();     //定义集合为first
  7.                 int number = 14;                        //每次报数的点
  8.                 for (int i=1;i<=100 ;i++ )  //在集合加入1~100
  9.                 {
  10.                         first.add(i);
  11.                 }
  12.                 sop(first);
  13.                 sop(first.size());
  14.                 Count(first,number);                //开始计算
  15.                 sop(first);
  16.                 sop(first.size());
  17.         }
  18.         private static ArrayList Count(ArrayList arl,int num)
  19.         {
  20.                 for (int x=arl.size(); x>=num; x--)//一次一次报数
  21.                 {
  22.                         arl.remove(num-1);                                //每到14时踢掉一个
  23.                         ArrayList changeCollection = new ArrayList();//定义另一个集合用来装下first中的前13个数
  24.                         for (int a = 0;a<num-1 ;a++ )                        //把first中的前13个数装在changeCollection中,并且删掉first内部的前13个数
  25.                         {
  26.                                 changeCollection.add(arl.get(0));
  27.                                 arl.remove(0);
  28.                         }
  29.                         for (int a =0;a<num-1 ; a++)                //把changeCollection中的数重新放入first中,并且放在最后
  30.                         {
  31.                                 arl.add(changeCollection.get(a));
  32.                         }

  33.                 }
  34.                 return arl;
  35.         }
  36.         public static void sop(Object obj)
  37.         {
  38.                 System.out.println(obj);
  39.         }
  40. }
复制代码
写的代码不好看

QQ截图20130719144359.png (659 Bytes, 下载次数: 0)

QQ截图20130719144359.png
回复 使用道具 举报
用LinkedList
回复 使用道具 举报
我的也是这道题 ,我算的是第44人 。

回复 使用道具 举报
这就是入学测试题?看看怎么解决的...
回复 使用道具 举报
不知道你做出来没啊,不过我有一个想法,可以相互学习:我的思路是建立在删除第14个后,接下来的第15数重新从1开始计数14个删除。如果题目理解错了那我的方法不再适用。如果哥们有什么好的方法可以相互探讨啊。

先将100个数装到ArrayList里,然后定义一个指针,用来记录要删除的第十四个数;用两个嵌套的for循环,内循环做14次循环,循序中指针加1,内循环没完成14次,删除指针对应的数。当指针的值为集合长度时,指针重置为0;到最后剩下一个元素时,那么最后那个元素的值就是要找的数。
总之内循环14次要删除一个数。其次要注意指针的变化。


回复 使用道具 举报
刘张朋 发表于 2013-7-21 13:59
不知道你做出来没啊,不过我有一个想法,可以相互学习:我的思路是建立在删除第14个后,接下来的第15数重新 ...

恩,呵呵,不错。。。。。。。。。。
回复 使用道具 举报
  1. package com.itheima.test;

  2. import java.util.LinkedList;
  3. import java.util.List;

  4. public class 踢数 {
  5.         // 有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
  6.         public static void main(String[] args) {
  7.                 List<Integer> circle = new LinkedList<Integer>();
  8.                 for (int i = 1; i <= 100; i++) {
  9.                         circle.add(i);
  10.                 }
  11.                 System.out.println("剩余编号:" + ti(circle, 1, 14));
  12.         }

  13.         private static Integer ti(List<Integer> circle, Integer first, Integer kill) {
  14.                 if (circle.size() == 1) {
  15.                         return circle.get(0);
  16.                 } else {
  17.                         for (int i = 0; i < circle.size(); i++) {
  18.                                 if (first == kill) {
  19.                                         circle.remove(i);
  20.                                         first = 0;
  21.                                         i--;
  22.                                 }
  23.                                 first++;
  24.                         }
  25.                         return ti(circle, first, kill);
  26.                 }
  27.         }
  28. }
复制代码


回复 使用道具 举报
我也要开始做入学测试了
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马