java实现丢手绢问题_java小孩丢手绢问题

public class Demo

{

public static void main(String[] args)

{

CyLink cyLink = new CyLink();

cyLink.setlen(5);

cyLink.setK(2);

cyLink.setM(2);

cyLink.CreateLink();

// 打印创建的环链接的样式

// cyLink.show();

cyLink.play();

}

}

class Child

{

int no;

Child nextchild = null;

Child indexChild = null;

public Child(int no)

{

this.no = no;

}

}

class CyLink

{

Child firstchild = null;

Child temp = null;

int len;

int k = 0;

int M = 0;

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 play()

{

Child temp = this.firstchild;

while (len != 1)

{

for (int i = 1; i < k; i++)

{

temp = temp.nextchild;

}

for (int j = 1; j < M; j++)

{

temp = temp.nextchild;

}

// 当前小孩的上个小孩的下个小孩指向当前小孩的下个小孩(让上一个小孩的nextchild指向当前小孩的nextchild)

temp.indexChild.nextchild = temp.nextchild;

// 当前小孩的下个小孩的上个小孩指向当前小孩的上个小孩(让下一个小孩的indexChild指向当前小孩的indexChild)

temp.nextchild.indexChild = temp.indexChild;

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);

temp = ch;

firstchild = ch;

} else

{

Child ch = new Child(i);

// 创建最后一个小孩

if (i == len)

{

// 保存当前temp

Child index = temp;

// 当前temp的下一个小孩是刚创建的小孩

temp.nextchild = ch;

// 刚创建的小孩赋给temp

temp = ch;

// 刚创建的小孩的上一个小孩是index

temp.indexChild = index;

// 刚创建的小孩的上一个小孩是第一个小孩

temp.nextchild = firstchild;

// 第一个小孩的上一个小孩是最后创建的小孩

firstchild.indexChild = ch;

}

// 创建其他小孩

else

{

// 保存当前temp

Child index = temp;

// 当前temp的下一个小孩是刚创建的小孩

temp.nextchild = ch;

// 刚创建的小孩赋给temp

temp = ch;

// 刚创建的小孩的上一个小孩是index

temp.indexChild = index;

}

}

}

}

public void show()

{

Child temp = this.firstchild;

do

{

System.out.println(temp.no + "前:" + temp.indexChild.no + "后:" + temp.nextchild.no);

temp = temp.nextchild;

} while (temp != this.firstchild);

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值