1. 程式人生 > 其它 >2、已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列; * 他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直

2、已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列; * 他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直

技術標籤:上機演算法上機複試javajava演算法

題目:

/*

  • 2、已知n個人(以編號1,2,3…n分別表示)圍坐在一張圓桌周圍。從編為k的人開始報數,數到m的那個人出列; 他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列。
    輸入:n= 9,k= 1, m=5
    輸出:5,1,7,4,3,6,9,2,8

*/

public class Two127 {

	public static void main(String[] args) {
		System.out.println("人數n:起點k:間隔m:(空格隔開三個資料)");
		Scanner scanner = new Scanner(System.in);
		String s = scanner.nextLine();
		scanner.close();
		
		String nkm[] = s.split(" ");
		int n = Integer.parseInt(nkm[0]);  //人數n
		int k = Integer.parseInt(nkm[1]);	//起點k
		int m = Integer.parseInt(nkm[2]);	//間隔m
		
		int [] people=new int[n];		//用來裝人編碼的陣列
		
		for (int i = 0; i < people.length; i++) {	//初始化這個陣列
			people [i]=i+1;
		}
		
		int a=k+m-2;		//第一個開始出列的人
		System.out.print("結果為:");
		while (n>0) {
			String mString=",";
			if (n==1) {
				mString=" ";
			}
			System.out.print(people[a]+mString);
			for (int i = a; i < n-1; i++) {
				people [i]=people[i+1];		//將這個人之後的前移一位;
			}
			n=n-1;							//人數減一個
			if(n!=0) {
				a=(a+m-1)%n;			//用取餘來實現第m個之後的人
			}	
		}
	}

}

執行結果:

在這裡插入圖片描述