| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3882 人关注过本帖
标题:[讨论]用JAVA解决约瑟夫环问题
只看楼主 加入收藏
abcefg
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-5-21
收藏
得分:0 
我运行这个程序时候怎么未初始化,又咋回事。我改了又改,还是不行,求救救。
2006-05-21 21:12
cnailan
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-7-3
收藏
得分:0 
有没有用顺序表实现这个问题的?
到处都是C#版的,看到都能背出来了。
可以的话,帮我看一下这个程序,也是解决这个问题的。
import *;
public class Josephus{
  public int p(int a[],int n,int s,int d){  //打印出一个出圈人的编号
    int i;
    i=(s+d-1)%n;
    System.out.print(a[i]+" ");
    return i;
  }  
  
  public void sort(int a[],int k){   //被出圈的人由后边的人递补上
    int length=a.length;
    for(int i=k;i<length-1;i++)
      a[i]=a[i+1];
  }
      
  public static void main(String args[])throws Exception{
    Josephus j=new Josephus();
         
     BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
     System.out.println("请输入人数(数值应小于15):");
     int N=Integer.parseInt(br.readLine());
     System.out.println("请输入开始数的人的编号:");
     int S=Integer.parseInt(br.readLine());
     System.out.println("请输入出圈的人的编号:");
     int D=Integer.parseInt(br.readLine());
if(N<15){
     int n=N,s=S,d=D;               
    int a[]=new int[N];
    for(int i=0;i<N;i++)   //数组中存放人的编号,第一个人在a[0]中,编号为1
      a[i]=i+1;
   
    System.out.println("有"+N+"个人,从第"+S+"个人开始数起,每数到第"+D+"个人,就出圈,出圈顺序如下,最后一个人可留下:");
    if (s==0){
      for(int i=0;i<N;i++){
        int k=j.p(a,n,s,d);
        j.sort(a,k);
        n=n-1;
        s=k;
      }
    }   //End of if
    else{
      s=s-1;
      for(int i=0;i<N;i++){
        
        int k=j.p(a,n,s,d);
        j.sort(a,k);
        n=n-1;
        s=k;
      }
    }   //End of else  
     }
    else{System.out.print("您输入的数值大于15");}
      
  }  // End of main
}    // End of class
2008-07-03 07:58
快速回复:[讨论]用JAVA解决约瑟夫环问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037923 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved