N個人站圈報數演算法問題
阿新 • • 發佈:2019-01-08
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));
}
}
}
}