今天看视频教程无意间看到了一个数3减1的问题,百度之发现叫约瑟夫环问题,于是写了程序,问题大致描述如下:

一群带有编号的孩子手拉手围成一个圈报数,开始的孩子数1,他右边数2,再右边数3,数到n的孩子out,接着从下一个孩子开始继续数1,数到n的孩子out,如此循环...问最后留下来的孩子是原来的多少号?

我这里用Java写了一个双向回环链表代表围成的圈,其中的Kid是一个链表节点,他有一个左同胞,一个右同胞,还有一个id。双向会还链表定义了添加节点方法add(),删去节点方法delete();队首孩子firstKid,队尾孩子LastKid,还有表的长度count。

class Kidcircle{
private int count;
Kid firstKid;
Kid LastKid;
Kidcircle(int num){
count = 0;
for(int i=0;i<num;i++){
add();
}
}
private void add(){
Kid k = new Kid();
k.id = count+1;
if(count==0){
LastKid = k;
firstKid = k;
} else {
k.left = LastKid;
k.right = firstKid;
LastKid.right = k;
firstKid.left = k;
LastKid = k;
}
count++;
}
public void delete(Kid k){
if(count<=1){
return;
} else {
count--;
k.left.right = k.right;
k.right.left = k.left;
if(k == firstKid){
firstKid = k.right;
}else if(k==LastKid){
LastKid = k.left;
}
}
}
public int getSize(){
return count;
}
}

Kid类如下:

class Kid{
Kid left;
Kid right;
int id;
}

然后main方法中这么写的,我假设的是数到3淘汰一个孩子,然后一共500人:

public class count3quit {
public static void main(String[] args){
Kidcircle Kc = new Kidcircle(500);
Kid currentKid = Kc.firstKid;
while(Kc.getSize()>1){
Kc.delete(currentKid.right.right);
currentKid = currentKid.right.right;
}
System.out.println(Kc.firstKid.id);
}
}

最后结果:436。

有时间还是要多回顾数据结构中的东西。

最新文章

  1. Spring cache简单使用guava cache
  2. java 堆栈 理解
  3. ArrayList 实现删除重复元素(元素为对象类型)
  4. 编译2.4.X apache 常见错误
  5. python3-day2-python基础2
  6. NPOI支持excel2003和excel2007
  7. Gumby – 基于 Sass 的灵活的,响应式 CSS 框架
  8. git之二
  9. C++学习笔记一 —— 两个类文件互相引用的处理情况
  10. java SE 常用的排序算法
  11. IOS AFNetworking
  12. HDU1009老鼠的旅行 (贪心算法)
  13. linux内核SPI总线驱动分析(二)(转)
  14. 一些推荐的spark/hadoop课程
  15. 各种排序算法代码(C语言版)
  16. 第一个 Python 程序 - Email Manager Demo
  17. 【HDU】1754 I hate it ——线段树 单点更新 区间最值
  18. Nginx与Tomcat安装、配置与优化
  19. 201521123054《JAVA程序设计》第三周学习总结
  20. Windows API Finishing

热门文章

  1. python 的文件编码处理
  2. hadoop中mapreduce的mapper抽象类和reduce抽象类
  3. SpringCloud-Nexfilx
  4. centos 6.5 解压 tar
  5. python request(HttpRequest对象)请求的属性、方法笔记
  6. 接口代码(requests库安装)
  7. operator函数操作符
  8. 初识 ❤ TensorFlow |【一见倾心】
  9. 解决修改 Linux 下的 PHP 环境变量不生效的方法
  10. Shell逻辑运算符及表达式