问题描述:

十个猴子围成一圈选大王,依次1-3 循环报数,报到3 的猴子被淘汰,直到最后一只猴子成为大王。问,哪只猴子最后能成为大王?

方法一:Java链表

public class TestAll {

static Scanner scanner = new Scanner(System.in);
static int num;
static String str;
static LinkedList<String> list = new LinkedList<String>();
static LinkedList<String> result = new LinkedList<String>();

public static void main(String[] arg) {
input();
output();
}

private static void output() {
pushNum();
Iterator it = result.iterator();
while (it.hasNext()) {
System.out.print(it.next() + " ");
}
}

private static void pushNum() {
int i = 1;
while (list.size() > 0) {
// System.out.println(i+"!! ");
Iterator it = list.iterator();
while (it.hasNext()) {
String node = (String) it.next();
if (i == num) {
result.add(node);
it.remove();
i = 0;
}
i++;
}
}

}

private static void input() {
str = scanner.nextLine();
String[] tmp = str.split(" ");
num = Integer.parseInt(tmp[0]);
for (int i = 1; i < tmp.length; i++) {
list.add(tmp[i]);
}

}
}

方法二:数组

public class TimeTest {
public static void main(String[] args) {
int num = 10;
boolean[] array = new boolean[num];
for (int i = 0; i < num; i++) {
array[i] = true;
}
int index = 0;
int count = 0;
int n = num;
while (n > 1) {
if (array[index] == true) {
count++;
if (count == 3)
// 当count等于3时,就淘汰一个;
{
array[index] = false;
n--; // 当有一个被淘汰时,n--;
count = 0;
}
}
index++;
// 当从0循环到29时,重新置index为0;
if (index == num) {
index = 0;
}
}
for (int i = 0; i < num; i++) {
if (array[i] == true)
System.out.println(i + 1);
}
}
}

其中方法一的时间复杂度为O(n^2)

方法二的时间复杂度为O(n)

Java两种方法实现循环报数的更多相关文章

  1. js循环遍历的两种方法for循环和for ... in 循环

    JS数组的遍历方法有两种: 第一种:一般的for循环,例如: var a = new Array("first", "second", "third& ...

  2. Java构造和解析Json数据的两种方法详解一——json-lib

    转自:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/23/3096001.html 在www.json.org上公布了很多JAVA下的jso ...

  3. Java构造和解析Json数据的两种方法详解二

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面接着介绍用org.json构造和解析Jso ...

  4. Java 获取*.properties配置文件中的内容 ,常见的两种方法

    import java.io.InputStream; import java.util.Enumeration; import java.util.List; import java.util.Pr ...

  5. Java学习笔记——可视化Swing中JTable控件绑定SQL数据源的两种方法

    在 MyEclipse 的可视化 Swing 中,有 JTable 控件. JTable 用来显示和编辑常规二维单元表. 那么,如何将 数据库SQL中的数据绑定至JTable中呢? 在这里,提供两种方 ...

  6. java 获取键盘输入常用的两种方法

    java 获取键盘输入常用的两种方法 方法1: 通过 Scanner Scanner input = new Scanner(System.in); String s = input.nextLine ...

  7. 在Java Web程序中使用监听器可以通过以下两种方法

    之前学习了很多涉及servlet的内容,本小结我们说一下监听器,说起监听器,编过桌面程序和手机App的都不陌生,常见的套路都是拖一个控件,然后给它绑定一个监听器,即可以对该对象的事件进行监听以便发生响 ...

  8. C#统计给定的文本中字符出现的次数,使用循环和递归两种方法

    前几天看了一个.net程序员面试题目,题目是”统计给定的文本中字符出现的次数,使用循环和递归两种方法“. 下面是我对这个题目的解法: 1.使用循环: /// <summary> /// 使 ...

  9. Java构造和解析Json数据的两种方法详解二——org.json

    转自:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/24/3096437.html 在www.json.org上公布了很多JAVA下的jso ...

随机推荐

  1. jdk7_ConcurrentHashMap 图示

    jdk7_ConcurrentHashMap初始化图示 jdk7_ConcurrentHashMap_put和get操作_扩容_线程安全的分析

  2. syslog-ng源码安装问题

    title: 2019-4-22 tags: 新建 author:yangxiaoyi --- 问题:在源码安装syslog-ng软件时执行./configure遇到如下报错, require eve ...

  3. RabbitMQ 保证消息不丢失

    参考:https://www.imooc.com/article/49814 发送消息的时候,加上messageId字段,数据库记录消息日志表 ,插入的时候为发送中 当收到消息的时候,更改为已发送 , ...

  4. 物联网框架ServerSuperIO.Core(.netcore)跨平台,一套设备驱动通吃嵌入式、上位机、云服务

    1.      概述... 2 2.      ServerSuperIO.Core跨平台开发环境... 2 3.      ServerSuperIO.Core特点... 2 4.      Ser ...

  5. tarjin求割点

    题目: hdu3671 http://acm.hdu.edu.cn/showproblem.php?pid=3671 题意:给一个无向图,要求毁掉两个点,使图变得不连通,图一开始是连通的 因为要毁掉两 ...

  6. 百度地图Web引用

    上海中心二楼 示例 http://api.map.baidu.com/geocoder?address=北京市海淀区上地信息路9号奎科科技大厦&output=html&src=weba ...

  7. 什么是布局?Android中的布局是怎样的?

    布局管理器(通常被称为是布局)是对ViewGroup类的扩展,是用来控制子控件在UI中的位置. Android SDK包含了许多布局类,在为视图.Fragment和Activity创建UI时,可以使用 ...

  8. Exp3 免杀原理与实践 20164302 王一帆

    1 实践内容 1.1 正确使用msf编码器(0.5分),msfvenom生成如jar之类的其他文件(0.5分),veil-evasion(0.5分),加壳工具(0.5分),使用shellcode编程( ...

  9. input type='file' 上传文件 判断图片的大小是否合格与witdh 和 height 是否合格

    function CheckFiles(obj) { var array = new Array('gif', 'jpeg', 'png', 'jpg'); //可以上传的文件类型 if (obj.v ...

  10. 在Github上为项目添加多个用户

    点击项目目录中的Settings 点击Collaborators 添加后,合作者会受到确认邮件,等待合作者确认后,合作者就可以提交了 添加组织 在Settings中找到Organizations 点击 ...