編號為1,2,3,......,n的n個人按順時針方向圍坐一圈,開始選一正整數m,從第一人開始,按順時針方向自1開始順序報數,報到m時此人出列,從他在順時針方向的下一個人開始從1報數,如此下去,直至剩一個人,求出個人的編號
public class Exercise
{
public static void main(String args[])
{
int i, j, n, m;
if(args.length != 2) //處理參數數目不正確情況
{
System.out.println("Please Input a number!");
return;
}
n = Integer.parseInt(args[0]);
m = Integer.parseInt(args[1]);
if (n <= 0 || m <= 0)
{
System.out.println("Paramter Error!");
return;
}
int a[] = new int[n];
for (i = 0; i < n; i++) a[i] = i + 1;
int k = 1; //標識處理第k個離開的人
i = -1; //數組下標,下一個為0,即第一個人
while (true)
{
//在圈中數m個人
for (j = 0; j < m;)
{
i = (i + 1) % n;
if (a[i] != 0) //a[i]不為0表示還沒有離開
{
j++;
}
}
if (k == n) break; //k等于n表示只剩下一個人了
a[i] = 0; //表示該人離開
k++;
}
System.out.println("No." + a[i] + " is the winner!");
}
}