设编号为1,2,n的n个人围坐一圈,约定编号为K(1=<K<=n)的人从1开始报数,数到m的人出列,她的下一位又从1开始报数,数到m的人又出列,以此类推直到所有人都出列,由此产生一个出队序列。
分析:用一个不带头结点的循环列表处理:先构成一个有n个节点的单循环链表,然后从K节点开始计数,记到m时,对应节点从链表中删除,然后在从被删除节点的下一个节点又从一开始计数,直到最后一个节点从链表中被删除。
/**
* 功能:丢手帕问题(约瑟夫)
*/
package com.lin;
public class Demo4 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Cyclink cyclink=new Cyclink();
cyclink.setlen(5);
cyclink.createlink();
cyclink.setk(2);
cyclink.setm(2);
cyclink.show();
cyclink.play();