今天来迫害一下程序设计技能实训的“约瑟夫退圈”
这东西当时我就没整明白,主要是箭头太多不知道怎么用了,但到了JAVA这些都可以用点来完成。
代码如下:
package test2; import java.util.Scanner; class node { public int id; public node next; public node pro; } final class Class13 { static void setlist(node headnode,int n) { node position; position=headnode; for(int i=2;i<=n;i++) { node temp=new node(); temp.id=i; position.next=temp; temp.pro=position; position=temp; } position.next=headnode; headnode.pro=position; } static void cinlist(node headnode,int m,int n,int k) { int id=1; node position=headnode; for(int i=1;i<m;i++) {position=position.next;} int sum=0; for(;;) { if(id==k) { System.out.print(position.id+" "); position.pro.next=position.next; position.next.pro=position.pro; sum++ ; if(sum==n-1) { position=position.next; break; } id=0; } position=position.next; id++; } System.out.print(position.id+" "); } public static void main(String[] args) { int n,startid,m; Scanner input=new Scanner(System.in); System.out.print("输入排圈人数\n"); n=input.nextInt(); System.out.print("输入起始者的ID\n"); startid=input.nextInt(); System.out.print("请输入每次报数的值\n"); m=input.nextInt(); node head; head = new node(); head.id=1; setlist(head,n); cinlist(head,startid,n,m); input.close(); } }
运行结果如下: