主题:Josephus约瑟夫环代码
我的网址:www.javaedu.com.cn
QQ:2535279
设有N个人围坐在一个圆桌周围,先从第S个人开始报数.数到第M个人出列,
然后从出列的下一个人开始报数,数到第M个人又出列...如此重复,直到所有的人
全部出列为止.对于任意给定的N,S和M,求出出列次序,得到N个人的顺序表
//顺序表实现
public class Test {
public static void main(String[] args){
int[] arr={1,2,3,4,5,6,7,8,9};
arr=Josephus(3,9,5,arr);
for(int i=0;i<arr.length;i++)
System.out.print(arr[i]+" ");
}
static int[] Josephus(int s,int n,int m,int[] arr) {
int s1=s;
int temp;
for(int i=n;i>=2;i--){
s1=(s1+m-1)%i;
temp=arr[s1];
for(int j=s1;j<=i-2;j++)
arr[j]=arr[j+1];
arr[i-1]=temp;
}
for(int k=0;k<arr.length/2;k++){
temp=arr[k];
arr[k]=arr[n-k-1];
arr[n-k-1]=temp;
}
return arr;
}
}
//链表实现public class JosephusLink{
public static void main(String[] args){
int s=3;
int n=5;
Node head,p,r;
head=new Node();
head.data=1;
head.next=head;
r=head;
for(int i=2;i<=9;i++){
p=new Node();
p.data=i;
p.next=head;
r.next=p;
r=p;
}
r.next=head;
//r 是尾指针
for(int i=1;i<=s;i++){
r=r.next;
}
while(r!=r.next){
for(int i=1;i<n;i++){
r=r.next;
}
System.out.print(r.next.data+" ");
r.next=r.next.next;
}
System.out.print(r.data);
}
}
更多资料尽在网址:www.javaedu.com.cn
QQ:2535279
设有N个人围坐在一个圆桌周围,先从第S个人开始报数.数到第M个人出列,
然后从出列的下一个人开始报数,数到第M个人又出列...如此重复,直到所有的人
全部出列为止.对于任意给定的N,S和M,求出出列次序,得到N个人的顺序表
//顺序表实现
public class Test {
public static void main(String[] args){
int[] arr={1,2,3,4,5,6,7,8,9};
arr=Josephus(3,9,5,arr);
for(int i=0;i<arr.length;i++)
System.out.print(arr[i]+" ");
}
static int[] Josephus(int s,int n,int m,int[] arr) {
int s1=s;
int temp;
for(int i=n;i>=2;i--){
s1=(s1+m-1)%i;
temp=arr[s1];
for(int j=s1;j<=i-2;j++)
arr[j]=arr[j+1];
arr[i-1]=temp;
}
for(int k=0;k<arr.length/2;k++){
temp=arr[k];
arr[k]=arr[n-k-1];
arr[n-k-1]=temp;
}
return arr;
}
}
//链表实现public class JosephusLink{
public static void main(String[] args){
int s=3;
int n=5;
Node head,p,r;
head=new Node();
head.data=1;
head.next=head;
r=head;
for(int i=2;i<=9;i++){
p=new Node();
p.data=i;
p.next=head;
r.next=p;
r=p;
}
r.next=head;
//r 是尾指针
for(int i=1;i<=s;i++){
r=r.next;
}
while(r!=r.next){
for(int i=1;i<n;i++){
r=r.next;
}
System.out.print(r.next.data+" ");
r.next=r.next.next;
}
System.out.print(r.data);
}
}
更多资料尽在网址:www.javaedu.com.cn