约瑟夫问题
来源:互联网 发布:淘宝店铺名化妆品 编辑:程序博客网 时间:2024/05/15 06:08
500个人围成一个圈 从第一个开始数,只要是三的倍数,就退出,下一个人从头开始数,求最后那个人的序号。
public class CountThreeQuit {public static void main(String[] args) { boolean[] arr = new boolean[500]; for(int i =0;i<arr.length;i++) { arr[i] = true; } int leftCount = arr.length; //剩余人数 int countNum = 0; //计数 int index = 0; //当前人的位置 while(leftCount > 1) { if(arr[index]) { countNum ++; if(countNum == 3) { countNum = 0; arr[index] = false; leftCount --; } } index++; if(index == arr.length) { index = 0; } } for(int i=0;i<arr.length;i++) { if(arr[i]){ System.out.println(i+1); } }}}
面向对象的思路
public class CountThreeQuit2 {public static void main(String[] args) {KidCircle kc = new KidCircle(500);int countNum = 0;Kid k = kc.first;while(kc.count > 1) {countNum++;if(countNum == 3 ) {countNum = 0;kc.dele(k);} k = k.right;}System.out.println(k.id);}}class Kid {int id;Kid left; //左边的小孩Kid right;}class KidCircle {int count = 0;Kid first ,last; //开头,结尾的小孩KidCircle(int n) {for(int i=0;i<n;i++) {add();}}void add() {Kid k = new Kid();k.id = count ;if(count <= 0) {first = k;last = k;k.left = k;k.right = k;}else {last.right = k;k.left = last;k.right = first;first.left = k;last = k;}count++;}void dele(Kid k) { if(count<=0) { return ; }else if(count == 1){ first = last = null; }else { k.left.right = k.right; k.right.left = k.left; if(k == first) { first = k.right; }else if(k == last) { last = k.left; } } count--;}}
0 0
- 约瑟夫问题、约瑟夫环
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- com.springframework.web.client.RestTemplate
- “Linux内核分析”实验报告二
- pip版本更新的问题
- 第四章 第二节——基本途径
- 框架知识概述
- 约瑟夫问题
- CF 614 C Peter and Snow Blower (海伦公式、n个顶点绕圆扫过的最大面积)
- Spark schedule资源调度分配详解
- 对象(CarDemo)
- 解决ScrollView嵌套ListView问题 ListView只显示一行问题
- 最左侧1问题
- windows下安装php的redis扩展
- GreenDao的使用心得
- Java内部类分类