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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

臭和尚 发表于 2014-10-23 12:18
class Test{
        public static void main(String[] args){
        int N = 100;

循环里面的 s = (s+m)%i; 代表什么呢
回复 使用道具 举报
qinye 初级黑马 2016-8-30 00:48:15
42#
ye361571404 发表于 2014-10-9 17:09
这道题我是看完 韩顺平的 这个视频做出来的: 循序渐进学 java 从入门到精通 第11讲-约瑟夫问题.avi

这个代码,基本接近API 的链表源码了吧。。。。我这个菜鸟只能望洋兴叹了
回复 使用道具 举报
qinye 初级黑马 2016-8-30 01:02:40
43#
ye361571404 发表于 2014-10-9 17:09
这道题我是看完 韩顺平的 这个视频做出来的: 循序渐进学 java 从入门到精通 第11讲-约瑟夫问题.avi

这个代码,基本接近API 的链表源码了吧。。。。我这个菜鸟只能望洋兴叹了
回复 使用道具 举报
package 练习;  import java.util.ArrayList; public class Test2 {         public static void main(String[] args) {                 ArrayList<Integer> list = new ArrayList<>();                  for (int i = 1; i < 101; i++) {                         list.add(i);                 }                 int count=0;                 while(true){                         if(list.size()>1){                                 for (int i = 0; i < list.size(); i++) {                                         count++;                                         if(count==14){                                                 list.remove(i);                                                 count=0;                                                 i--;                                         }                                 }                         }else{                                 break;                         }                 }                 System.out.println(list);         } }
回复 使用道具 举报
其实这题还是比较简单的啦,主要还是思路问题,我的思路是当14个人退出后从15个人开始重新数,当然此时的第15人在这个圈中是14,因为他取代了原来退出的14的那个人的位置!       思路:我们可以定义两个变量,一个用于记录报数的人是第几个人,另一个记录报数的总次数
       步骤:  A:定义count 记录次数,当count%14==0的时候,说明有人该退出了
                 B:定义一个循环用于记录那个人在报数,当这个报数的人报到最后一个人的时候,又从第一个人开始报数
                 C:一直重复上面的步骤,直到只有一个人的时候就输出这个人就行了.
语言表达能力比较差,直接上代码吧!
    ArrayList<Integer> list=new ArrayList<>();
                for (int i = 1; i <= 100; i++) {
                        list.add(i);
                }
                int count=0;//记录报数的次数
                for (int j = 1; j <= list.size(); j++) {//j就表示是第几个人在报数
                        count++;
                        if (count%14==0) {
                                int a=list.get(j-1);
                                list.remove(j-1);
                                j--;
                        }
                        if (j>=list.size()&&list.size()!=1) {//当只有一个人的时候就不需要再回去了
                                j=0;//因为是围成一个圈所以当每个人都报数完后回到第一个人报数,因为这里放在循环的末尾,结束后j会马上自增一次
                        }
                        syso输出这个身下的数就行了
回复 使用道具 举报
123
您需要登录后才可以回帖 登录 | 加入黑马