我运行这个程序时候怎么未初始化,又咋回事。我改了又改,还是不行,求救救。
有没有用顺序表实现这个问题的?
到处都是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