Child类
package com.cg.jpsephu;
public class Child{
int no;
Child nextChild = null;
public Child(int no)
{
this.no = no;
}
}
Cylink类
package com.cg.jpsephu;
public class Cylink {
Child firstChild = null;
int len = 0;
int k =0;
int m = 0;
Child temp = null;
public void setlen(int len)
{
this.len = len;
}
public void setk(int k)
{
this.k= k;
}
public void setm(int m) {
this.m = m;
}
public void creatlink()
{
int i;
for(i = 1;i<=len;i++)
{
if(i==1) {
Child ch = new Child(i);
this.firstChild = ch;
this.temp = ch;
}
if(i==len)
{
Child ch = new Child(i);
temp.nextChild = ch;
this.temp = ch;
temp.nextChild = this.firstChild;
}
if(i!=1&&i!=len)
{
Child ch = new Child(i);
temp.nextChild = ch;
temp = ch;
}
}
}
public void show()
{
Child temp = this.firstChild;
do {
System.out.println("第"+temp.no+"个小孩加入游戏");
temp = temp.nextChild;
}while(temp!=this.firstChild);
}
public void play()
{
Child temp = this.firstChild;
//1.先找到开始数数的人
for(int i = 1;i<k;i++)
{
temp = temp.nextChild;
}
while(this.len!=1)
{
for(int j = 1;j<m;j++)
{
temp = temp.nextChild;
}
//找到要出圈的前一个小孩
Child temp2 = temp;
while (temp2.nextChild != temp)
{
temp2 = temp2.nextChild;
}
//将数到m的小孩,退出圈
temp2.nextChild = temp.nextChild;
System.out.println("第"+temp.no+"个小孩退出圈");
//让temp指向下一个数数的小孩
temp = temp.nextChild;
this.len--;
}
System.out.println("第"+temp.no+"个小孩退出圈");
}
主函数
public static void main (String args[])
{
Cylink cy = new Cylink();
cy.setlen(10);
cy.creatlink();
cy.setm(3);
cy.setk(3);
cy.show();
System.out.println("/*****游戏开始*****/");
cy.play();
}
}