约瑟夫问题
来源:互联网 发布:灯光特效软件 编辑:程序博客网 时间:2024/05/16 08:04
约瑟夫环问题笔试中比较常遇见的一道算法题:
由m个人围成一个首尾相连的圈报数。从第一个人开始,从1开始报数,报到n的人出圈,下一个人继续从1开始报数,直到所有的人都出圈为止。对于给定的m和n,求出所有人的出圈顺序.
下面给出java面向过程的实现方法,读起来可能比较绕,大家参照注释并放到eclipse运行哈应该可以明白:-)
import java.util.Scanner;public class Josephus {/** * @param args */public static void main(String[] args) {// TODO 自动生成的方法存根System.out.println("程序说明如下:\n");System.out.println("由m个人围成一个首尾相连的圈报数。\n" + "从第一个人开始,从1开始报数,报到n的人出圈,\n"+ "剩下的人继续从1开始报数,直到所有的人都出圈为止。\n" + "对于给定的m和n,求出所有人的出圈顺序.\n");Scanner scanner = new Scanner(System.in);System.out.println("请输入人数:");int m = scanner.nextInt();System.out.println("请输入出局号码:");int n = scanner.nextInt();System.out.println("按出圈次序输出序号:");long s1 = System.currentTimeMillis();// 创建有m个值得数组,并赋初值int[] a = new int[m];for (int i = 0; i < a.length; i++) {a[i] = i + 1;}// 需要出圈的人数int len = m;// i为元素下标,j代表当前要报的数int i = 0;int j = 1;while (len > 0) {if (a[i % m] > 0) {if (j % n == 0) { // 找到出圈的人,并把圈中人数减一System.out.print(a[i % m] + " ");a[i % m] = -1;j = 1;i++;len--;} else {i++;j++;}} else { // 遇到空位了,就跳到下一位,但j不加一,也就是这个位置没有报数i++;}}long s2 = System.currentTimeMillis();System.out.println("所用总时间为: " + (s2 - s1) + " ms");}}
- 约瑟夫问题、约瑟夫环
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- hdu4451-Dressing
- SqlServer四个排名函数(row_number、rank、dense_rank和ntile)的比较
- linux socket()调用与arp报文发送
- AndroidStudio初体验:解决Execution failed for task ':TestAndroid:compileDebug'.
- 能够兼容ViewPager的ScrollView
- 约瑟夫问题
- 根据不同环境加载不同js文件
- ADF11g-033:Oracle adf custom accordion component skinning with CSS
- Python Exercise #4
- sql随机抽取数据库记录
- sql server中存储过程
- 实现CheckboxGroup的全部选中
- gridview合并相同信息行的问题 [问题点数
- android 音频系统