实际问题:
约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的人的序号为5,4,6,2,3。最后剩下1号。
假定在圈子里前K个为好人,后K个为坏人,你的任务是确定这样的最少M,使得所有的坏人在第一个好人之前被杀掉
思路分析:
这里直接上代码了
package cn.itjy.linkedlist;
import java.awt.Frame;
/**
* 约瑟夫问题
* @author dell
*/
public class Josepfu {
public static void main(String[] args) {
// 测试
CircleSingleLinkedList list = new CircleSingleLinkedList();
list.addBoy(50);
list.showBoy();
// 测试一把小孩出圈是否正确
list.countBoy(1, 2, 50);
}
}
// 创建一个环形的单向链表
class CircleSingleLinkedList {
// 创建一个first节点,当前没有编号
private Boy first = null;
// 添加