用Java实现约瑟夫问题
简介:
约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题。在计算机编程的算法中,类似问题又称为约瑟夫环。又称“丢手绢问题”.)
例子:
len个人围成一个圈,玩丢手绢游戏。从第k个人开始,从1开始数数,当数到m时,数m的人就退出圈子,当圈子只剩下一个人为止。
问题分析与算法设计
约瑟夫问题并不难,但求解的方法很多;题目的变化形式也很多。这里给出一种实现方法。
题目中len个人围成一圈,因而启发我们用一个循环的链来表示,可以使用结构数组来构成一个循环链。结构中有两个成员,其一为指向第一个孩子的头节点,另一个为作为判断的节点temp(负责跑龙套)。
具体代码:
package demo11;
/**
* 约瑟夫问题, 化为丢手绢
*
* @author tianq 思路:建立一个Child类 一个循环列表类CyclLink
*/
public class demo11 {
public static void main(String[] args) {
CyclLink cyclink = new CyclLink();
cyclink.setLen(15);
cyclink.createLink();
cyclink.setK(2);
cyclink.setM(2);
cyclink.show();
cyclink.play();
}
}
// 先建立一个孩子类
class Child {
// 孩子的标识
int no;
Child nextChild;// 指向下一个孩子
public Child(