約瑟夫環java實現
阿新 • • 發佈:2018-12-19
關於此次約瑟夫環的解答,關鍵是自己動手去嘗試,本人使用的是eclipse(java)去編寫的,內容是確認過結果的,歡迎指正
1、首先說一下,約瑟夫環的問題就是類比於一圈小朋友,圍在一塊,然後丟手絹,以定點的長度進行篩選,繼而最後剩下最後一名小朋友。
2、在此次試驗中,遇到的情況有count計數和陣列下表之間的關係,每一次更改,都需要調整,我的陣列是,將陣列的下標從1,開始,正好方便放置原數的加法,0號位置,也可以存放時那個小朋友,也可以遍歷下標來找到最後一個小朋友,這裡使用陣列數值為-1,為淘汰標誌。
程式碼如下
public class Main { public static void main(String[] args) { // TODO Auto-generated method stub int a[]=createInt(10); showEm(a); System.out.println("pre"); int flag=josep(a,5); System.out.println("last one"+flag); showEm(a); /*System.out.println(sb1+" "+ sb2);*/ } public static void showEm(int a[]) { System.out.println(""); for(int i=0;i<a.length;i++) { System.out.print(a[i]+" "); } } public static int[] createInt(int size) { int[] X = new int[size+1]; for(int i=1;i<size+1;i++){ int data = (int) (Math.random()*1000); X[i]=data; } return X; } public static int josep(int[] a,int flag) { int step; int number=a.length; step = 1; while(number!=1) { int count=0; if(step >10) { step=1; } int i=step; while(true) { if(flag==count) { break; } if(a[i]!=-1) { count++; i++; }else { i++; } if(i==a.length) { i=1; } } i--; step=i+1; if(i<1) { i=10; } number--; if(number==1) { a[0]=a[i]; }else { a[i]=-1; } } return a[0]; } }
這裡的約瑟夫環問題,要抓住邊界,以及迴圈條件,即可,歡迎交流