您的位置:首页 > 编程语言 > Java开发

约瑟夫问题java实现

2017-05-12 19:25 369 查看
package demo.suanfa;public class yuesefu {public static void main(String[] args) {CycleLink cyclelink = new CycleLink();cyclelink.setLen(10);cyclelink.CreateLink();cyclelink.setK(2);cyclelink.show();cyclelink.play();}}//孩子结点class Child{int no;Child nextChild
= null;Child(int no){this.no = no;}}//firstChild存放链表首第一个孩子,temp用于暂存孩子的引用class CycleLink{int len = 0;Child firstChild = null;Child temp = null;int k = 0;public void setLen(int len){this.len = len;}public void setK(int k){this.k = k;}//开始playpublic void play(){Child
temp = this.firstChild;//1.找数数的人for(int i=1 ;i<k;i++){temp = temp.nextChild;}while(this.len!=1){//2.数m下for(int i=1;i<k;i++){temp = temp.nextChild;}//找到出圈前一个小孩Child temp2 = temp;//性能差while(temp2.nextChild!=temp){temp2 = temp2.nextChild;}//3.将数到m小孩.退出圈temp2.nextChild
= temp.nextChild;temp = temp.nextChild;this.len--;}//最后小孩System.out.println("丢手帕最后出圈: "+temp.no);}//初始环形链表public void CreateLink(){for(int i = 1;i <= len;i++){if(i==1){Child ch = new Child(i);firstChild = ch;temp = ch;}else{if(i==len){Child ch = new Child(i);temp.nextChild
= ch;temp = ch;temp.nextChild = firstChild;}else{Child ch = new Child(i);temp.nextChild = ch;temp = ch;}}}}public void show(){temp = firstChild;do{System.out.println(temp.no);temp = temp.nextChild;}while(temp!=firstChild);}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: