黑马程序员技术交流社区

标题: Java 数据结构 [打印本页]

作者: 范贞亮    时间: 2012-10-24 22:19
标题: Java 数据结构
怎么用Java 解决约瑟夫问题
作者: 陈琦    时间: 2012-10-24 22:32
建议看一看马士兵的视频,马士兵用了三种方法模拟约瑟夫环,而且用约瑟夫环讲的如何从面向过程到面向对象进行转变。
作者: 奋斗的青春    时间: 2012-10-24 22:33
哥们想问的是这个问起吧: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. }
复制代码

作者: 张翰之    时间: 2012-10-24 23:09
保证坏人一直在M的位置上
作者: 田旭阳    时间: 2012-10-25 00:45
manwuyuantao 发表于 2012-10-24 22:33
哥们想问的是这个问起吧:12个人排成一圈,从1号报数,凡是数到5的人就走出队列(出局),然后继续报数,试 ...

你用的什么发工具啊
作者: 何创    时间: 2012-10-25 11:33
约瑟夫环问题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
田旭阳 发表于 2012-10-25 00:45
你用的什么发工具啊

怎么可以让技术分得的更高呀? 我目前才2分呢?想要快速得到25分报名? 求解如何达到高分呀?谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2