1. 程式人生 > >N個人站圈報數演算法問題

N個人站圈報數演算法問題

import java.util.Scanner;

public class Test1 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		int n;// 人數
		int m;// 報名數(報到的出列)
		

		System.out.print("請輸入n:");
		n = input.nextInt();
		System.out.print("請輸入m:");
		m = input.nextInt();
		int num = n;// 剩餘人數
		int
flag = 0;// 標記報名數,每報一次就加1 int[] arr = new int[n];// 陣列,剛開始所有數都為0,0代表存貨,1代表刪除該元素 // 只要剩餘人數大於等於1個人,就一直迴圈 while (num >1) { for (int i = 0; i < n; i++) { if (arr[i] == 0) { flag++; } if (flag == m) { arr[i] = 1; System.out.println("第" + (i + 1) + "次出列:編號" + (i+1)); flag=
0; num--; } } } for (int i = 0; i < n; i++) { //最後編號為0代表存活的 if(arr[i]==0) { System.out.println("最後剩下:" + (i+1)); } } } }