问题:
有编号从1到N的N个人坐成一圈报数,报到M的人出局,下一位再从1开始,如此持续,直止剩下一位为止,报告此人的编号X。输入N,M,求出X。
源程序如下:
/**
* @author rmouse
* 2006-2-18
* 转载请注明出处,谢谢!
* 约瑟夫环问题
*
*/
public class Josephus
{
public static void main(String args[])
{
int i, m, n, l, k;
int index;
int a[] = new int[200];
int b[] = new int[200];
for (index = 0; index < 200; index++)
{
a[index] = index + 1;
}
for (i = 200; i > 1; i--)
{
k = 3 % i;
for (m = 0; m < (i - 1) && k < i; m++, k++)
{
b[m] = a[k];
}
for (l = m, k = 0; l < i && k < (3 % i - 1); l++, k++)
{
b[l] = a[k];
}
for (n = 0; n < 200; n++)
{
a[n] = b[n];
b[n] = 0;
}
}
for (index = 0; index < 200; index++)
{
if (a[index] != 0)
{
System.out.println(a[index]);
}
}
}
}