约瑟夫问题
2007-07-14 10:47
246 查看
编号为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
;
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!");
}
}
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
;
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!");
}
}
相关文章推荐
- 3517 And Then There Was One 约瑟夫问题
- 第二十四周项目4-猴子选大王(约瑟夫问题)
- 约瑟夫问题(动态规划解法)
- 约瑟夫问题 【物联网1132-11】
- 用单循环链表实现约瑟夫问题。
- 数组——约瑟夫问题
- 常用算法Java实现之(1)------约瑟夫问题(丢手帕问题)
- hihocoder第九十四周 数论三·约瑟夫问题
- 约瑟夫问题
- POJ-2746:约瑟夫问题(Java版)
- 数据结构与算法(单循环链表_约瑟夫问题)
- 关于 约瑟夫问题,报道m值的数出列。
- 约瑟夫问题的解法-良好接口的重要性
- 约瑟夫问题
- 约瑟夫的幸存者问题
- 约瑟夫问题 双链表实现
- PHP基于关联数组20行代码搞定约瑟夫问题示例
- 约瑟夫问题--双向循环链表的创建与删除
- Wiki OI 1282 约瑟夫问题
- 利用循环链表实现约瑟夫问题的求解