问题描述

有100人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。

代码实现:

public class Count3Quit1 {
//利用数组
public static void main(String[] args) {
boolean[] arr = new boolean[100]; 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] == true) {
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] == true) {
System.out.println(i+1);
}
}
}
}

面向对象风格的实现:

public class Count3Quit2 {

	public static void main(String[] args) {
KidCircle kc = new KidCircle(100);
int deleteCount = 0;
Kid kid = kc.first; while (kc.count > 1) {
deleteCount++;
if (deleteCount == 3) {
deleteCount = 0;
kc.delete(kid);
} kid = kid.right;
} System.out.println(kid.id+1);
}
} class Kid {
int id;
Kid left, right;
} class KidCircle {
Kid first, last;
int count = 0; public KidCircle(int num) {
for (int i =0; i < num; i++) {
add();
}
} public void add() {
Kid kid = new Kid();
kid.id = count; if (count < 0) {
return ;
} else if (count == 0) {
kid.left = kid;
kid.right = kid;
first = kid;
last = kid;
} else {
first.left = kid;
last.right = kid;
kid.left = last;
kid.right = first;
last = kid;
} count++;
} public void delete(Kid kid) {
if (count <= 0) {
return ;
} else if (count == 1) {
first = last = null;
} else {
kid.left.right = kid.right;
kid.right.left = kid.left;
if (kid == first) {
first = kid.right;
}
if (kid == last) {
last = kid.left;
}
} count--;
}
}

Java数三退一问题的更多相关文章

  1. 【Java基础】“数三退一”问题的代码实现

    现在有500个小孩,编号为0-499,手牵手连成一个圈,从第一个小孩开始"123123..."报数,数到三的小孩退出,求剩下的最后一个小孩的编号. public static vo ...

  2. JAVA第三周作业(从键盘输入若干数求和)

    JAVA第三周作业(从键盘输入若干数求和) 在新的一周,我学习了JAVA的IO编程.下面的代码实现了从键盘输入若干数求和的目标.import java.util.Scanner; public cla ...

  3. Java进阶(三十八)快速排序

    Java进阶(三十八)快速排序 前言 有没有既不浪费空间又可以快一点的排序算法呢?那就是"快速排序"啦!光听这个名字是不是就觉得很高端呢. 假设我们现在对"6 1 2 7 ...

  4. Java进阶(三十七)java 自动装箱与拆箱

    Java进阶(三十七)java 自动装箱与拆箱 前言 这个是jdk1.5以后才引入的新的内容.java语言规范中说道:在许多情况下包装与解包装是由编译器自行完成的(在这种情况下包装称为装箱,解包装称为 ...

  5. Java进阶(三十五)java int与integer的区别

    Java进阶(三十五)java int与Integer的区别 前言 int与Integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而Integer是对象 ...

  6. Java进阶(三十四)Integer与int的种种比较你知道多少?

    Java进阶(三十四)Integer与int的种种比较你知道多少? 前言 如果面试官问Integer与int的区别:估计大多数人只会说到两点:Ingeter是int的包装类,注意是一个类:int的初值 ...

  7. Java第三次实验敏捷开发与XP实验

    实验三-1 1.实验要求: 实验三 敏捷开发与XP实践 http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的内容替换成IDEA 参考 http: ...

  8. Java生成三位随机数

    转: [转]Java生成三位随机数 public class Test2 { public static void main(String [] srgs) { int i=(int)(Math.ra ...

  9. Java EE : 三、图解Session(会话)

    目录 Java EE : 一.图解Http协议 Java EE : 二.图解 Cookie(小甜饼) Java EE : 三.图解Session(会话) 概述 一.Session由来 二.Sessio ...

随机推荐

  1. [redis读书笔记] 第二部分 单机数据库 RDB持久化

    内存中的rdb是会存为文件以做到RDB持久化的.RDB文件时一个二进制文件. 一 载入与存储 文件的载入是在server启动时进行的(rdbload()),因为AOF的更新频率比RDB高,所以如果AO ...

  2. JAVA ReentrantLock的使用

    源码如下 对比synchronized,synchronized使用时会显示的指定一个对象(方法为调用对象,代码块会需要对象作为参数),来获取一个对象的独占锁 而ReentrantLock可能就是使用 ...

  3. Effective Java, Third Edition

    https://github.com/jbloch/effective-java-3e-source-code 网址是 Effetive java的源码 effective-java-3e-sourc ...

  4. windows服务器 IIS FTP服务

    一.安装ftp,如果服务器没有,去windows组件里面装一下. 安装IIS,安装FTP(版本不同,选项不相同,这两项必选) 二.装完之后在IIS管理中心创建FTP站点   创建类型   ftp站点: ...

  5. Centos7 LVM扩容实例

    Centos7 lvm 扩容与以往版本有所不同   1.插入硬盘,我是在虚拟机上做的测试  直接添加一块5G的硬盘   2.系统读取硬盘信息     # echo "- - -" ...

  6. Angular组件通信

    一. 组件间通信(组件间不能互相调用,公共方法放在服务中) (目前项目采用将公共方法直接写在ts文件中没使用服务) ng g service services/服务名 App.module.ts{ 引 ...

  7. centos6.5下编译安装单实例MySQL5.5

    MySQL5.5版本安装3步曲: 1) cmake 2) make 3) make install 查看系统版本号 [root@meinv01 ~]# cat /etc/redhat-release ...

  8. git报错:fatal: No configured push destination.

    本地仓库代码(git push)上传git仓库报错: fatal: No configured push destination. Either specify the URL from the co ...

  9. java的异常体系 及强制转换

    一,异常 1.常见的几种异常: StackOverFlow  栈溢出错误:写递归函数的时候,没有定义递归结束的条件. ArrayIndexOutofBounds   数组越界:如新new一个数组,in ...

  10. springboot之swagger快速启动(新的ui)

    springboot之swagger快速启动(新的ui) 功能点: 集成swagger前端接口文档 Swagger 整合 zuul 智能列表 无缝集成 knife4j 前端文档 支持 v0.1.2RE ...