丢手帕程序C语言,约瑟夫问题,即丢手帕游戏

/**

@author sunqian

@time 2015.1.27

@功能 约瑟夫(丢手帕)问题

@描述 n个小孩围坐,从k位小孩开始开始约定一个数m并开始轮流报数,数到m的小孩出列直到列表为空,并打印出列顺序 */ package com.sunqian.yuesefu;

public class Yuesefu {

/**

@param args */ public static void main(String[] args) { // TODO Auto-generated method stub CyLink c1=new CyLink(15,2,2); c1.play(); }

}

//环形链表 class CyLink{ //属性

Child firstChild=null; Child temp=null; int len=0; int k; int m; //设置链表大小len,开始位置k,报数m public CyLink(int len,int k,int m){ this.len=len; this.k=k; this.m=m; } //开始游戏 public void play(){ //小孩围坐,创建链表并打印 this.createLink(); this.show(); System.out.println("从"+k+"位小孩开始开始约定一个数"+m+"并开始轮流报数,数到"+m+"的小孩出列"); //1,到第k个小孩 Child childk=this.find(this.firstChild, this.k); //2.开始玩耍 int left=this.len; Child bnc=childk; while(left>0){

Child childM=this.find(bnc, m);

Child childBM=this.find(bnc, m-1);

bnc=childM.nextChild;

System.out.println("出列孩子"+childM.no);

childBM.nextChild=childM.nextChild;

if(left==1)System.out.println("出列完毕!");

left--;

}

} //给定开始小孩,找到第K个小孩,包括开始小孩 public Child find(Child begin,int k){ Child kchild=begin; for(int i=1;i

}

} }

//打印链表 public void show(){ Child temp=this.firstChild; System.out.println("总共有"+this.len+"个小孩"); do{ System.out.println("第"+temp.no+"个小孩序号为"+temp.no); temp=temp.nextChild; }while(temp!=this.firstChild); } } //小孩类 class Child{ int no; Child nextChild=null;

//构造方法 Child(){

} public Child(int no){ this.no=no;

} }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值