package ttt;

import java.util.HashMap;
import java.util.Map.Entry; /**
* 有17个人围成一圈(编号0~16),从第0号的人开始从1报数,凡报到3的倍数的人离开圈子,然后再数下去,
* 直到最后只剩下一个人为止,问此人原来的位置是多少号?
*
*/
public class n人报数m时离开 { public static void main(String[] args) {
HashMap<Integer, Integer> theQuee = new HashMap<Integer,Integer>();
for (int i = 0; i < 17; i++) {
theQuee.put(i, i+1);//编号,固定位置
}
HashMap<Integer, Integer> itretMap = itretMap(theQuee,theQuee.size());
for (Entry<Integer,Integer> entry : itretMap.entrySet()) {
if(entry.getValue()!= 0){
System.out.println("结果:"+entry.getKey());
}
}
} //遍历Map并给非3的倍数的Key的value+1
public static HashMap<Integer, Integer> itretMap(HashMap<Integer,Integer> map,int lenth){
int sum = 0;
for (Entry<Integer,Integer> entry : map.entrySet()) {
int value = entry.getValue();
if(value%3 != 0){//不可以整除
entry.setValue(value+lenth);//加
sum++;//进入下一轮
}else{
if(0!=entry.getValue()){//避免重复淘汰
entry.setValue(0);//淘汰
lenth --;//参与者-1
}
}
}
if(sum>1){//
System.out.println("还要继续,还有:"+sum);
return itretMap(map,sum);
}else{//已决出胜出者
return map;//返回map
}
}
}

加班回来的路上看到一个这样的题,题目就是标题,

(原题地址:http://www.cnblogs.com/tonybinlj/archive/2009/01/04/1367856.html),然后自我感觉用了个比较拙劣的方式,最后还是实现了。这里的17和3当然可以当做参数m,n来处理。。
弄完网上找了找。C系列实现形式思路基本上是一样的。
然后数学好的三行代码就搞定了。。遍历次数也是最少的。效率达到O(n):
    public static void main(String[] args) {
int n =0;
for (int i = 2; i <= 17; i++) {
n = (n+3)%i;
}
System.out.println(n);
}

java解答:有17个人围成一圈(编号0~16),从第0号的人开始从1报数,凡报到3的倍数的人离开圈子,然后再数下去,直到最后只剩下一个人为止,问此人原来的位置是多少号?的更多相关文章

  1. C语言——N个人围成一圈报数淘汰问题

    <一>问题描述: 有17个人围成一圈(编号为0-16),从第 0号的人开始从 1报数, 凡报到 3的倍数的人离开圈子,然后再数下去,直到最后只剩下一个人为止. 问此人原来的位置是多少号? ...

  2. C++经典题目:有n个人围成一圈,顺序排号,然后数数进行淘汰的解法和一些思考

    问题描述: 有n个人围成一圈,顺序排号.从第一个人开始报数(1~3报数),凡报到3的人退出圈子,问最后留下的人原来排在第几号. 分析: 首先由用户输入人数n,然后对这n个人进行编号[因为如果不编号的话 ...

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

    1 /*37 [程序 37 报数] 2 题目:有 n 个人围成一圈,顺序排号.从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出圈子, 3 问最后留下的是原来第几号的那位. 4 */ 5 ...

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

    首先,我最大的学习来源不是百度而是我群友~~在这里表白一波我热爱学习的群友们!然后今天群里突然有人提出了题目的这个问题:有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出 ...

  5. n人围成一圈报数

    题目:有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位 思路:用一个数组存这n个人,里面的初始状态全设为1,表示都还在圈子里面. ...

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

    题目:有n个人围成一圈,顺序排号,从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号那位. public class _037NumberOff { public st ...

  7. 20190121-n个人围成一圈,凡报到3的人退出圈子,最后留下的是原来第几号的那位

    1. 报数问题:有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位 思路:此题主要问题在于但凡报到3的人退出圈子,而报数的号码与圈子的 ...

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

    import java.util.ArrayList; import java.util.List; import java.util.Scanner; //有n个人围成一圈,顺序排号.从第一个人开始 ...

  9. python基础练习题(题目 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少)

    day13 --------------------------------------------------------------- 实例021:猴子偷桃 题目 猴子吃桃问题:猴子第一天摘下若干 ...

随机推荐

  1. final可以修饰类、属性、方法。

      当用final修饰类的时候,此类不可被继承,即final类没有子类.这样可以用final保证用户调用时动作的一致性,可以防止子类覆盖情况的发生.   当利用final修饰一个属性(变量)的时候,此 ...

  2. SpringBoot------自动装配Mapper报错

    如图: 解决方法: 转载: https://blog.csdn.net/j754379117/article/details/71639043

  3. Unity长连接

    http://blog.csdn.net/claine/article/details/52374546

  4. npm WARN install Refusing to install vue-router as a dependency of itself

    今天在使用npm安装插件的时候提示如下错误: npm WARN install Refusing to install vue-router as a dependency of itself npm ...

  5. Linux awk sort

    2018-05-31 15:56:38|25961|Cmd_Hero_GetFreeHeros_CS|2|481|0|14|222018-05-31 15:56:38|25961|Cmd_Role_G ...

  6. 【MySQL】随机获取数据的方法,支持大数据量

    在mysql中带了随机取数据的函数,在mysql中我们会有rand()函数,很多朋友都会直接使用,如果几百条数据肯定没事,如果几万或百万时你会发现,直接使用是错误的.下面我来介绍随机取数据一些优化方法 ...

  7. hbase region still in transition

    1,删除hbase中的 hbase:meta表中相应的region的row 如; get 'hbase:meta','kylin_metadata,,1481101316881.f3b4c7c1148 ...

  8. xgboost原理

    出处http://blog.csdn.net/a819825294 1.序 距离上一次编辑将近10个月,幸得爱可可老师(微博)推荐,访问量陡增.最近毕业论文与xgboost相关,于是重新写一下这篇文章 ...

  9. HyperLogLog 算法的原理讲解以及 Redis 是如何应用它的

    作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...

  10. Hystrix入门与分析(一):初识Hystrix

    在以前的文章中,我们介绍过使用Gauva实现限流的功能,现在我们来了解一下如何在服务框架中实现熔断和降级的方法. 简介Hystrix 大型系统架构的演进基本上都是这样一个方向:从单体应用到分布式架构. ...