华为机试题: 约瑟夫问题(Java)
来源:互联网 发布:电脑怎么连接宽带网络 编辑:程序博客网 时间:2024/06/05 08:51
描述:
功能: 约瑟夫问题众所周知,原始的约瑟夫问题是这样的:有n个人,编号为1,2,..., n,站成一圈,
每次第m个将会被处决,直到只剩下一个人。约瑟夫通过给出m来决定赦免其中的一个人。
例如当n=6,m=5时,5,4,6,2,3将会被依次处决,而1将会幸免。
假如有k个好人,和k个坏人,所有人站成一圈,前k个人是好人,后k个人是坏人,
编写程序计算一个最小的m,使k个坏人都被处决,而不处决任何好人。
输入: k 为正整数
输出:
返回: 最小的m,使k个坏人都被处决,而不处决任何好人。
package huawei;public final class Demo {/*功能: 约瑟夫问题众所周知,原始的约瑟夫问题是这样的:有n个人,编号为1,2,..., n,站成一圈,每次第m个将会被处决,直到只剩下一个人。约瑟夫通过给出m来决定赦免其中的一个人。例如当n=6,m=5时,5,4,6,2,3将会被依次处决,而1将会幸免。假如有k个好人,和k个坏人,所有人站成一圈,前k个人是好人,后k个人是坏人,编写程序计算一个最小的m,使k个坏人都被处决,而不处决任何好人。 输入: k 为正整数 输出: 返回: 最小的m,使k个坏人都被处决,而不处决任何好人。 */public static int getMinimumM(int K){ /*在这里实现功能*/int m = K, remainPeople = 2 * K;//从K下标开始查找,剩下的人数初始化为2 * Kint currIndex = 0;//当前应该删除的位置int deleteNum = 0; //已经删除的人数int start = 1; //从当前位置开始计数while(true){/*从start位置开始数1,数到m,就到currIndex位置, 当currIndex为0的时候,为最后一个元素*/currIndex = (start + m - 1) % remainPeople;if(currIndex > K || currIndex == 0){/*判断是否删除K个,如果是的话,则m已经找到*/deleteNum++;if (deleteNum == K){return m;}/*删除一个元素,这个元素位于 [K..2K]之间*/remainPeople --;/*判断下一个起点*/if(currIndex == 0) start = 1;else start = currIndex;}else //这个m不符合要求{start = 1;remainPeople = 2 * K;deleteNum = 0;m++; //判断下一个m}}}}
0 0
- 华为机试题: 约瑟夫问题(Java)
- 华为机试题(11)--约瑟夫问题
- 华为机试题-约瑟夫问题
- 约瑟夫环问题华为机试题
- 华为2014届机试题之约瑟夫环问题
- 华为2014届机试题之约瑟夫环问题
- 华为机试 - 约瑟夫问题
- 华为面试题——约瑟夫问题的C++简单实现(循环链表)
- 一道华为面试题的分析(约瑟夫问题)
- 华为机试——约瑟夫环问题(总结)
- 一个Java面试题(约瑟夫环问题)
- 一个Java面试题(约瑟夫环问题)
- 华为机试---约瑟夫环问题
- 华为OJ 约瑟夫问题
- 约瑟夫环—华为试题
- 华为Java机试题
- 华为Java机试题
- 华为java机试题整理(二)
- poj 2312 Battle City(优先队列+bfs)
- 普林斯顿微积分读本:第 3 章 极限导论
- Mssql从零开始(1)
- LVS-三种负载均衡方式比较
- 普林斯顿微积分读本:第 25 章 如何求解估算问题
- 华为机试题: 约瑟夫问题(Java)
- Spring进阶之路(3)-bean获得Spring的容器
- 浅析伪罗伯特法所构造的任意阶数伪二次幻方中某一任意位置权值的一般求法
- Exynos4412 裸机开发 —— IIC总线
- 机器学习、模式识别中的相似性度量
- 1076. Forwards on Weibo (30)
- uva 11388 最大公约数与最小公倍数的关系
- Linux设备驱动模型 SPI之一
- 安卓TextView中的文本加上横线或者下划线