3、约瑟夫问题的一种描述是:编号为1,2,……,n的n个人按顺时针方向坐一圈,每人持有一个密码(正整数)。一开始任选一个作为报数上限值m,从第一个开始顺时针自1开始顺序报数,报到m是停止报数。报m的人
题目:
/*
3、约瑟夫问题的一种描述是:
编号为1,2,……,n的n个人按顺时针方向坐一圈,每人持有一个密码(正整数)。一开始任选一个作为报数上限值m,
从第一个开始顺时针自1开始顺序报数,报到m是停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向
的下一个人重新从1报数,如此下去,直到所有的人全部出列为止。设计一个程序,求出出列顺序。(20分)初值:m
人数:n
依次的密码:
*/
代码:
public class Three207 {public static void main(String[] args) {System.out.println("第一行为m初值,第二行人数n,第三行依次每人的密码(每个密码空格隔开):");//输出提示语句Scanner sc = new Scanner(System.in); //获取控制台输入String str = "";int s = 1;ArrayList<String> strList = new ArrayList<String>();//动态数组while(s<=3){ str = sc.nextLine();strList.add(str); //添加至动态数组s=s+1;}sc.close();int m = Integer.parseInt(strList.get(0).trim());int n = Integer.parseInt(strList.get(1).trim());String string = strList.get(2).trim();String strpsw [] = string.split(" ");if (n == strpsw.length) {int [] psw = new int[n]; //密码数组for (int i = 0; i < strpsw.length; i++) { //密码与编号差1 psw[i] = Integer.parseInt(strpsw[i]);}/** 编号:0 1 2 3 4 5密码:5 4 2 1 6 3*/int [] num = new int[n]; //编号数组for (int k = 0; k < num.length; k++) {num[k] = k+1;}/* 初始序列 开始第一次 。。。。。。* i:0 1 2 3 4 5 0 1 2 3 4 5编号:1 2 3 4 5 6 1 2 4 5 6 6*/int space = m%n-1;while (n>0) {String mString=",";if (n==1) {mString=" ";}System.out.print("输出序列为:"+num[space]+mString);int t=num[space]-1; //先保存一下这次所数到的人的编号for (int i = space; i < n-1; i++) {num [i] = num[i+1];}n--;if (n != 0) {space = (space+psw[t]-1)%n;}}}else {System.out.println("密码个数输入有误!");}}}
运行结果:
3、约瑟夫问题的一种描述是:编号为1,2,……,n的n个人按顺时针方向坐一圈,每人持有一个密码(正整数)。一开始任选一个作为报数上限值m,从第一个开始顺时针自1开始顺序报数,报到m是停止报数。报m的人相关推荐
- 实验题目:约瑟夫环问题:设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,m为任意一个正整数。从第一个人开始顺时针方向自1起顺序报数,报到m时停止并且报m的人出列,再从他的下一个人
实验题目:约瑟夫环问题:设编号为1,2,3,--,n的n(n>0)个人按顺时针方向围坐一圈,m为任意一个正整数.从第一个人开始顺时针方向自1起顺序报数,报到m时停止并且报m的人出列,再从他的下一 ...
- 约瑟夫环!编 号是1,2,??,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向 自1开始顺序报数,报到m时停止报数。
流程: ⑴建立模型,确定存储结构: ⑵ 对任意 n个人,密码为 m,实现约瑟夫环问题: ⑶出圈的顺序可以依次输出,也可以用一个数组存储. 示意图: 设计: 首先,设计实现约瑟夫环问题的存储结构.由于约 ...
- 约瑟夫环的c语言描述
约瑟夫环的c语言描述 问题描述 代码(C语言) 问题描述 约瑟夫(Joseph)问题的一种描述是:编号为1,2,-,n的n个人按顺时针方向围坐一圈.每人持有一个密码(正整数).一开始任选一个正整数作为 ...
- C语言循环链表(不带头结点)解约瑟夫问题的一种变形
一.问题描述 约瑟夫(Joseph)问题的一种描述是:编号为 1,2,-,n 的 n 个人按顺时针方向围坐一圈,每人持有一个密码(正整数),一开始任选一个整数作为报数上限 m,从第一人开始按顺时针方向 ...
- 约瑟夫问题的几种解决方法
约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题.在计算机编程的算法中,类似问题又称为约瑟夫环.又称"丢手绢问题".). 编号为1.2.3--.n的n个人按 ...
- 约瑟夫问题I(由n个人坐成一圈,按顺时针由1开始给他们编号。然后由第一个人开始报数,数到m的人出局。现在需要求的是最后一个出局的人的编号。)
此题联系牛客网"孩子们的游戏(圆圈中最后剩下的数)". 题目描述: 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为牛客的资深元老,自然也准备了一 ...
- Blah数集 描述: 大数学家高斯小时候偶然间发现一种有趣的自然数集合Blah,对于以a为基的集合Ba定义如下: (1) a是集合Ba的基,且a是Ba的第一个元素; (2)如果x在集合Ba中,则
Blah数集 描述: 大数学家高斯小时候偶然间发现一种有趣的自然数集合Blah,对于以a为基的集合Ba定义如下: (1) a是集合Ba的基,且a是Ba的第一个元素: (2)如果x在集合Ba中,则2x+ ...
- 约瑟夫环c语言单链表的解题思路,太透彻了:约瑟夫环的三种解法
[CSDN 编者按]极大概率出现在面试中的约瑟夫环问题来啦,本文三种方法描述解题思路,这样讲解绝对让面试官眼前一亮. 作者 | bigsai 责编 | 欧阳姝黎 前言 约瑟夫环问题是算法中相当经典的一 ...
- Verilog HDL三种描述方式
一.数据流建模方式 在组合逻辑电路中,数据不会存储,因此输入信号经过电路变为输出信号类似于数据流动.可以通过连续赋值语句这种特性进行建模,这种建模方式通常被称为数据流建模. 连续赋值语句只能用来对连线 ...
最新文章
- HBase保存的各个字段意义解释
- Power Law and Exponential Decay of Inter Contac...
- TypeScript基础入门 - 泛型 - 泛型类型
- Metasploit的三种启动方式
- 空间句法软件_【特训营2:空间句法高阶班】GIS中的空间句法运用 丨城市数据派...
- 一维数组,二维数组,三维数组,数组与指针,结构体数组,通过改变指针类型改变访问数组的方式
- python包怎么用_python的包怎么应用
- 奇数单增序列(信息学奥赛一本通-T1177)
- PencilWang博客目录
- SPFA - Luogu 3385 【模板】负环
- Andriod Recovery模式及ClockworkMod Recovery简介
- Hcse 交换知识点-4
- java初级项目 小说_webmagic项目实战(爬小说网站)
- python通过线程实现定时器timer的方法
- 一些有意思的知识的网站
- 详解文件存储空间管理中的位示图法
- 第27次CCF-CSP计算机软件能力认证(2022-09-18)
- shell mysql并发_shell脚本中的多进程并发处理
- PMSM永磁同步电机滑模控制的直接转矩控制改进算法仿真模型,在传统算法上结合滑模控制算法加以改进
- IDEA中maven配置解决jar包下载报错,亲测好用