华为机试题-约瑟夫问题
来源:互联网 发布:百叶窗 知乎 编辑:程序博客网 时间:2024/06/07 21:50
记得做个一个类似的问题,就是大家围城一个圈,然后依次数数,数到特定数的退出,问最后留下谁。今天发现这原来是个很经典的问题:约瑟夫 环
约瑟夫环问题描述如下:
历史学家约瑟夫和友人以及其他39人多在山洞中躲避战乱,除约瑟夫和友人外其他人表示要集体自杀来表明自己绝不投降的志气。做法是41个人围城一个圈,然后顺时针报数,1,2,3.报数为3的人立刻自然,然后下一个人从1重新开始报数。约瑟夫和友人不想自杀,那么他们需要站在为几号的位置?
扩展:我们不妨输入任意一个数n>=3,问按照上面的自杀规则,留下的是几号?
java程序实现如下:
package huawei;import java.util.Scanner;//用于获得输入public class Josephus {/** *约瑟夫问题 */public static void main(String[] args) {Scanner in = new Scanner(System.in);System.out.print("Please input the number of the people:");//提示用户输入游戏人数int number = in.nextInt();int[] out = Jose(number);//调用函数获得游戏结束时的数组(状态)System.out.println("The number of the survive peoples are:");for(int i = 0; i < number; i++){if (out[i] == 1)System.out.print(i + 1 + "\t");//得到游戏结束剩下人的编号}}static int[] Jose(int n){int[] num = new int[n];for (int i = 0; i < n; i++){num[i] = 1;//初始化一个整数数组,为1表示或者为0表示已经自杀。}int count = 0, indix = 0, remain = n;//n用于记录剩余人数,indix用于记录游戏者的编号while(true){if (num[indix] == 1){count++;if (count % 3 == 0)//数到3的自杀{num[indix] = 0;remain--;}}indix++;if (indix == 41){indix = 0;}if (remain <= 2){return num;}}}}输入/输出格式如下:
Please input the number of the people:41The number of the survive peoples are:1631
阅读全文
1 0
- 华为机试题-约瑟夫问题
- 华为机试题(11)--约瑟夫问题
- 约瑟夫环问题华为机试题
- 华为机试题: 约瑟夫问题(Java)
- 华为2014届机试题之约瑟夫环问题
- 华为2014届机试题之约瑟夫环问题
- 华为机试 - 约瑟夫问题
- 一道华为面试题的分析(约瑟夫问题)
- 华为机试---约瑟夫环问题
- 华为OJ 约瑟夫问题
- 约瑟夫环—华为试题
- 华为机试题--排序问题
- 大连理工 华为2013 约瑟夫问题
- 【华为练习题】约瑟夫问题拓展
- 华为面试题——约瑟夫问题的C++简单实现(循环链表)
- 华为机试一道关于约瑟夫环的问题
- 华为机试——约瑟夫环问题(总结)
- 华为机试.约瑟夫环
- 【PythonDjango后台实例 第七章】Django使用Video.js视频播放插件
- PAT 甲级 1010. Radix (25)
- struts2的核心和工作原理
- SQL server递归查询
- hdu 6215(技巧)
- 华为机试题-约瑟夫问题
- AutoML 学习
- linux ssh免密码登陆
- cent os 6.3部分命令
- c++二维指针求每行每列次大值
- 作业
- ajax&promise
- JavaSE_day1-3(笔记)
- 5.1 hashlib.py