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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. public class Test10 {

  2.         public static void main(String[] args) {
  3.                 for(int i=1;i<=10000;i++){
  4.                         if(i%14==0 && i>9900){
  5.                                 System.out.println(i-9900);
  6.                         }
  7.                 }
  8.                
  9.        
  10.         }
  11. }难道这么暴力算出的答案还不对吗?
复制代码

点评

你也是厉害。。  发表于 2015-4-12 17:35
回复 使用道具 举报
lmcci 中级黑马 2015-4-18 00:23:30
22#
import java.util.LinkedList;

public class Count {
        public static void main(String[] args) {

                LinkedList<Integer> i = new LinkedList<Integer>();

                for (int x = 1; x < 101; x++) {
                        i.add(x);
                }

                while (i.size() != 1) {
                        for (int x = 0; x < 13; x++) {
                                i.add(i.removeFirst());
                        }
                        i.removeFirst();
                }

                System.out.println(i);
               

        }
}
回复 使用道具 举报
谢谢分享
回复 使用道具 举报
我直接用数组做的,可参考。
  1. package com.itheima;
  2. /**
  3. * 第10题:有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。
  4. * 然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
  5. * @author zl
  6. *思路:
  7. *一,可以定义一个数组,数组的索引表示每个人的id,元素大小可以设为0和1,0表示数到14的出圈的人,1表示还在圈里;
  8. *二,定义count,表示当前报的数,具有累加性,定义在循环外;num表示在圈里剩下的人数;
  9. *三,定义嵌套循环,内循环表示遍历数组并进行判断剩余的人数;外循环一直执行直到剩余人数为1就跳出。
  10. */
  11. public class Test10_ArrayCount {

  12.         public static void main(String[] args) {

  13.                 int[] arr = new int[100];
  14.                 for(int i=0; i<arr.length; i++) {
  15.                         arr[i] = 1;
  16.                 }       
  17.                
  18.                 //定义当前应该报的数
  19.                 int count = 1;
  20.                
  21.                 //循环报数,报数一圈(遍历一次数组)为一次循环,得到剩余的人数和报数,并判断;
  22.                 while(true) {
  23.                         //定义圈里剩下的人数;由于出圈的人在仍在数组里,所以每次遍历前都需要先假定其没有出圈并进行判断;
  24.                         int num = arr.length;
  25.                        
  26.                         for(int i=0; i<arr.length; i++) {
  27.                                 //判断当前人数是否出圈,如果出圈则报数不改变而人数减1;如果在圈内,则先判断当前报数大小
  28.                                 if(arr[i]==0) {
  29.                                         //如果当前人早已经出圈,则num---
  30.                                         num --;
  31.                                 } else {
  32.                                         //如果当前人没有出圈,则判断报数大小
  33.                                         if(count !=14) {
  34.                                                 //如果当前报数不等于14则下一个报数增1
  35.                                                 count ++;
  36.                                         } else {
  37.                                                 //如果当前报数为14,则当前元素值设为0,即出圈;重设count =1;圈里的人数变为num-1
  38.                                                 arr[i] = 0;
  39.                                                 count =1;
  40.                                                 num --;
  41.                                         }
  42.                                 }
  43.                         }               
  44. //                        System.out.println(num);
  45.                        
  46.                         //如果循环一圈后,圈内人数为1,则跳出循环
  47.                         if(num==1) {
  48.                                 break;
  49.                         }
  50.                 }
  51.                
  52.                 //遍历并选出元素为1的索引
  53.                 for(int i=0; i<arr.length; i++) {
  54.                         if(arr[i] == 1) {
  55.                                 //数组的索引是从0开始的,因此需要加1才表示实际的人的次序。不能说第0个人吧!
  56.                                 int left = i+1;
  57.                                 System.out.println("最后剩下的是第"+ left+"人");
  58.                         }
  59.                 }
  60.                
  61.         }
  62. }
复制代码
回复 使用道具 举报

嘿,哥们,能够对这个程序做点解释?这个简洁、高效的代码(我所见过的几种方法中最简洁最高效的),如果看不懂真是可惜啊!!!
回复 使用道具 举报
学习下!
回复 使用道具 举报
学习了,呵呵
回复 使用道具 举报
xxz 中级黑马 2015-7-6 02:06:42
28#
  1. public static void main(String[] args){
  2.                
  3.                 //创建链表集合 LinkedList
  4.                 LinkedList<Integer> link=new LinkedList<Integer>();
  5.                 for(int i=1;i<=100;i++){
  6.                         plink.add(i);
  7.                 }
  8.                
  9.                 int start=0,count=1;
  10.                 int link_size=link.size();
  11.                 while(link_size>1){
  12.                         //循环移除链表集合元素的方式得到最后一个元素
  13.                         System.out.println("第"+ count++ +"个退出的人的编号:"+link.remove(start=(start+13)%link_size).intValue());
  14.                         link_size=link.size();
  15.                 }
  16.                 //最后剩下的一个元素的order属性就是答案
  17.                 System.out.println("\n"+"最后剩下的人的编号是:"+link.peek().intValue());
  18.                
  19.         }
复制代码


回复 使用道具 举报
我怎么感觉这题会用递归呢?
回复 使用道具 举报
本帖最后由 hnxtzouyuxi 于 2015-9-18 21:43 编辑

package com.yuxi.day20;
import java.util.ArrayList;
public class Test2 {

        /**
         *         需求:2、 有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。
         * 然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
         *
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                //建立一个集合分别把握1-100的数字存入
                ArrayList<Integer> al =new ArrayList<Integer>();
                for(int i=0;i<100;i++)
                {
                        al.add(i+1);
                }
                method(al);
                System.out.println(al.get(0));
        }
        public static void method(ArrayList<Integer> arr)
        {
                //报的数字开始值为1
                int number=1;
                while(true)
                {
                        //确定集合中至少有一元素
                        if(arr.size()>1)
                        {
                                //循环遍历当number等入14的时候,删除集合相对应的为元素
                                for(int i=0;i<arr.size();i++,number++)
                                {
                                        //当报到14的数就删除集合对应的元素
                                        if(number==14)
                                        {
                                                //对number重新置0
                                                number%=14;
                                                arr.remove(i);
                                                //删除后要使集合指向减1
                                                i--;
                                        }
                                }
                        }
                        //当最集合中只有一个元素的时候就是最后留下的那个人
                        else break;
                }
        }
}

回复 使用道具 举报
package com.yuxi.day20;
import java.util.ArrayList;
public class Test2 {

        /**
         *         需求:2、 有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。
         * 然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
         *
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                //建立一个集合分别把握1-100的数字存入
                ArrayList<Integer> al =new ArrayList<Integer>();
                for(int i=0;i<100;i++)
                {
                        al.add(i+1);
                }
                method(al);
                System.out.println(al.get(0));
        }
        public static void method(ArrayList<Integer> arr)
        {
                //报的数字开始值为1
                int number=1;
                while(true)
                {
                        //确定集合中至少有一元素
                        if(arr.size()>1)
                        {
                                //循环遍历当number等入14的时候,删除集合相对应的为元素
                                for(int i=0;i<arr.size();i++,number++)
                                {
                                        //当报到14的数就删除集合对应的元素
                                        if(number==14)
                                        {
                                                //对number重新置0
                                                number%=14;
                                                arr.remove(i);
                                                //删除后要使集合指向减1
                                                i--;
                                        }
                                }
                        }
                        //当最集合中只有一个元素的时候就是最后留下的那个人
                        else break;
                }
        }
}
回复 使用道具 举报

代码是对的。完全看不懂。。
回复 使用道具 举报
本帖最后由 865547883 于 2015-12-11 09:40 编辑

/*
* 10、 有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。
* 然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
*/
public class Test10 {

        public static void main(String[] args) {
                ArrayList<Integer> al = new ArrayList<Integer>();
                // 循环存储 1-100
                for (Integer i = 1; i <= 100; i++) {
                        al.add(i);
                }
                // 计数器
                int num = 0;
                // 外层循环 当集合长度为1时 结束循环
                for (; !(al.size() == 1);) {
                        // 内层循环 遍历集合
                        for (int i = 0; i < al.size(); i++) {
                                // 每循环一次计数器 +1
                                num++;
                                // 判断 当计数器为14的倍数时
                                if (num % 14 == 0) {
                                        // 删除这个元素
                                        al.remove(i);
                                        // 因为删除了1个元素,所以这个删去元素的索引上,是这个删去元素的后一个
                                        // 让索引减一 重新遍历该索引上的元素
                                        i--;
                                }
                        }
                }
                System.out.println(al.toString());
        }
}
回复 使用道具 举报
题目就不怎么清楚
回复 使用道具 举报
我刚做完 不客气  幸运数字
-
回复 使用道具 举报
新人路过,努力学习中
回复 使用道具 举报
啊啊发生的公司的分公司答复
回复 使用道具 举报
代码呢,写出来啊
回复 使用道具 举报
SQQ 中级黑马 2016-6-10 18:23:52
39#
学习了。。。
回复 使用道具 举报

好牛 o.O
                int k = 100;
               
                LinkedList list = new LinkedList<Integer>();
                for(int i=1;i<=k;i++)
                        list.add(i);
               
                Iterator it = list.iterator();
               
                while(list.size()!=1) {
                        for(int i=0;i<14;i++) {
                                if(!it.hasNext())
                                        it = list.iterator();
                                it.next();                       
                        }
                        it.remove();               
                }
                System.out.println(list.get(0));

这是我的代码,我想过用数组的,但是不知道怎么解决,你这个好简洁啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马