华为机试题【11】-报数删除人
2016-07-09 22:02
323 查看
题目描述:
有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出,问最后留下的那位是原来第几号。思路分析:
首先是选好数据结构,轻量级的boolean数组,下边代表序号,全部初始化位true退出变为false,设置全局变量int a,遍历数组,a++(当对应为false时候,continue跳过)
遍历数组统计true的数量,为1时候退出
注意:
如果要用List来存储,注意遍历remove删除时候,要一致,不能list和iterator混用代码:
import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Scanner; public class Main { static int all = 1; public static void main(String[] args) { Scanner scan = new Scanner(System.in); while(scan.hasNext()){ int input = scan.nextInt(); if(input < 1){ return; }else{ boolean[] persons = doCall(input); for (int i = 0; i < persons.length; i++) { if (persons[i]) { System.out.println("最后留下的是:"+(i+1)+"号。"); } } } } } public static boolean[] doCall(int person) { boolean[] persons = new boolean[person]; int number = person, key = 0; for (int i = 0; i < person; i++) persons[i] = true; while (number != 1) { for (int i = 0; i < person; i++) { if (!persons[i]) { continue; } else { key++; if (key % 3 == 0) { System.out.println("编号为:"+(i+1)+"的人退出。"); persons[i] = false; } } } number = 0; for (int i = 0; i < person; i++) { if (persons[i]) { number++; } } } return persons; } }
我的微信二维码如下,欢迎交流讨论
欢迎关注《IT面试题汇总》微信订阅号。每天推送经典面试题和面试心得技巧,都是干货!
微信订阅号二维码如下:
相关文章推荐
- 华为机试题【11】-报数删除人
- 华为机试题【11】-报数删除人
- 1、linux软件包管理
- Word Search
- 【自定义View系列】04--谈谈事件分发
- MFC标题和文字的修改
- [C#6] 7-索引初始化器
- 用GHOST备份系统
- java编码与解码
- zabbix监控nginx
- 数据结构和算法分析(9)表栈和队列的实际应用(一)
- 四则运算使用栈和后缀表达式
- 恢复Activity状态
- OpenLayers2 源码解读 事件Event、Events
- 精通iOS开发--第19章 Core Location 和 Map Kit 01 Capabilities 下 示例程序
- Bzoj2705 Longge的问题
- Java设计模式(学习整理)----装饰模式
- win7操作系统安装之后的批量设置脚本
- mybatis分页插件PageHelper的使用
- 解决view 滑动事件冲突(实战篇-内部拦截法)