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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 范贞亮 中级黑马   /  2012-10-24 22:19  /  1895 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

怎么用Java 解决约瑟夫问题

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

6 个回复

倒序浏览
建议看一看马士兵的视频,马士兵用了三种方法模拟约瑟夫环,而且用约瑟夫环讲的如何从面向过程到面向对象进行转变。
回复 使用道具 举报
哥们想问的是这个问起吧:12个人排成一圈,从1号报数,凡是数到5的人就走出队列(出局),然后继续报数,试问最后一人出局的是谁?
  1. import java.util.ArrayList;
  2. import java.util.List;

  3. public class Joseph{
  4.     private int interval;
  5.     private List<String> knights;

  6.     public Joseph(int step,String[] names){
  7.         this.interval = step;
  8.         this.knights = new ArrayList<String>();

  9.         for (String name:names)
  10.             knights.add(name);
  11.     }

  12.     public void start() {
  13.         int position = 0;

  14.         while (!knights.isEmpty()) {
  15.             position = (position + interval - 1) % knights.size();
  16.             String name = knights.remove(position);
  17.             System.out.println(name + " was removed");
  18.         }
  19.     }

  20.     public static void main(String[] args) {
  21.         String[] names = new String[]{"L","H","S","J","R",
  22.                 "G","Y","E","D","T",
  23.                 "E"};

  24.         Joseph j = new Joseph(5,names);
  25.         j.start();
  26.     }
  27. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

回复 使用道具 举报
保证坏人一直在M的位置上
回复 使用道具 举报
manwuyuantao 发表于 2012-10-24 22:33
哥们想问的是这个问起吧:12个人排成一圈,从1号报数,凡是数到5的人就走出队列(出局),然后继续报数,试 ...

你用的什么发工具啊
回复 使用道具 举报
约瑟夫环问题Java代码实现:
import java.util.Arrays;
public class TableTenPeoper {  
        /**
         * 10个人围一桌报数问题
         */
        private static int count=0;
        public static void main(String[] args) {
                Scanner scanner=new Scanner(System.in);
                System.out.println("请输入人数:");
                int n=scanner.nextInt();
                System.out.println("请输入出局号码:");
                int m=scanner.nextInt();
                sortP(n,m);                       
        }

        private static void sortP(int n, int m) {
                if(n==1){
                        System.out.println(n);;
                }else {
                        f1(n, m);
                }
        }
       
        private static void f1(int n, int m) {               
                int[] arr = new int[n];
                for(int j=0;j<n;j++){
                        for(int i = 0;i<m;i++){                                    
                                count++;
                                if(j>0){
                                measure(j, arr);
                                }                       
                                if(count>n){
                                        count=1;
                                        measure(j,  arr);
                                }
                        }
                        arr[j]=count;
                }
                System.out.println("出局顺序为:"+Arrays.toString(arr));
                System.out.println("最后出局人为:"+arr[n-1]);
        }

        private static void measure(int n,int[] arr) {
                for(int s = 0;s<n;s++){
                        for(int w=0;w<n;w++){
                                if(count==arr[w]) count++;
                        }
                }               
        }
}
回复 使用道具 举报
何创 中级黑马 2012-10-25 11:36:12
7#
田旭阳 发表于 2012-10-25 00:45
你用的什么发工具啊

怎么可以让技术分得的更高呀? 我目前才2分呢?想要快速得到25分报名? 求解如何达到高分呀?谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马