Java 實現藍橋杯奧運會開幕式 約瑟夫環問題

問題描述
  學校給高一(三)班分配了一個名額,去參加奧運會的開幕式。每個人都爭着要去,可是名額只有一個,怎麼辦?班長想出了一個辦法,讓班上的所有同學(共有n個同學)圍成一圈,按照順時針方向進行編號。然後隨便選定一個數m,並且從1號同學開始按照順時針方向依次報數,1, 2, …, m,凡報到m的同學,都要主動退出圈子。然後不停地按順時針方向逐一讓報出m者出圈,最後剩下的那個人就是去參加開幕式的人。
  要求:用環形鏈表的方法來求解。所謂環形鏈表,即對於鏈表尾結點,其next指針又指向了鏈表的首結點。基本思路是先創建一個環形鏈表,模擬衆同學圍成一圈的情形。然後進入循環淘汰環節,模擬從1到m報數,每次讓一位同學(結點)退出圈子。
  輸入格式:輸入只有一行,包括兩個整數n和m,其中n和 m的含義如上所述。
  輸出格式:輸出只有一個整數,即參加開幕式的那個人的編號。
輸入輸出樣例
樣例輸入
8 3
樣例輸出
7

import java.util.LinkedList;
import java.util.Scanner;

public class Joseph {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		int n=scanner.nextInt();
		int m=scanner.nextInt();
		LinkedList<Integer> list=new LinkedList<Integer>();
		for(int i=1;i<n+1;i++) {
			list.add(i);
		}
		int removeIndex=0;
		while(list.size()!=1) {
			removeIndex=(removeIndex+m-1)%list.size();
			list.remove(removeIndex);
		}
		System.out.println(list.get(0));
	}
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章