j使用數組實現約瑟夫環 java


我們首先來看一下約瑟夫環問題:

    給定m個人,m個人圍成一圈,在給定一個數n,從m個人中的第一個人每第n個人便將其除去,求被最后一個出去的人的編號。

    思路:

       建立一個長度為m+1的數組,將其的內容初始化為0至m

我們設置變量i與j,i代表數組元素的下表,因為我設置的數組長度為m+1,所以數組下標就為每個人的編號,當i==m的時候,我們將i置為0,讓其從頭開始便利。

變量j為判斷當前元素是否為排列的第n個元素,如果是則將當前下標為i的元素的值置為0,不是的話,i++,j++,每當我們遍歷到數值為0的元素時,continue,i++,不進行其他操作。

具體代碼如下:

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner = new Scanner(System.in);
		int m=scanner.nextInt();                      //讀取m的值
		int n = scanner.nextInt();                    //讀取n的值
		int[] a = new int[m+1];                       //設置一個長度為m+1的數組
		
		for(int i=0;i<=m;i++) {                       //初始化數組,將數組的值與其下標一一對應,易懂方便操作
			a[i]=i;
		}
		
		/*
		 * 設置變量i與j
		 * i為判斷下標即為元素值
		 * j為判斷n的元素,如果==n即將當前i的元素除去
		 */
		int i=0,j=1;                                 
		boolean flag=false;//設置一個標志變量,在循環中用於break以及continue
		
		while(true) {
			
			i++;               //一輪循環進行一次下表后移
			flag=false;        //將標志變量設置為false
			if(a[i]==0) {      //如果當前下標中的值為0,即跳過
				flag=true; 
				if(i==m)		//判斷此時的i是否==m,若果等於m則讓其重置為0
					i=0;
			}
			
			if(flag)            //對應上面的函數
				continue;
			
			if(j==n) {          //如果j==n了
				if(PanDuan(a)) {            //判斷此時數組中是否只有一個非零元素,如果是則當前找到的元素為最后一個元素,否則執行else
					System.out.println(i);
					flag=true;              //因為找到了最后一個元素,則設置標志變量為true
				}
				else {                      //只滿足j==n,不滿足其為最后一個元素,則讓當前元素的內容置為0,且讓j=0,開始新的計數
					a[i]=0;
					j=0;
				}
				
			}
			
			if(flag)                        //找到了最后一個元素,跳出循環
				break;
			
			if(i==m)                       //如果i==m,則讓i=0
				i=0;
			
			j++;                           //一輪循環,j++
			
			
		}
	}
	
	static boolean PanDuan(int [] a) {  //判斷給定數組中石否只有一個非零元素
		int count =0;
		for(int i=0;i<a.length;i++) {
			if(a[i]!=0)
				count++;
		}
		
		if(count==1)
			return true;
		return false;
	}

}

 此方法為數組解決,比起用集合麻煩,但是適用於還沒有學習集合api的小伙伴們。有更簡單的方法可以跟我交流哦~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM