博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
约瑟夫环简介,问题以及java实现
阅读量:4697 次
发布时间:2019-06-09

本文共 1301 字,大约阅读时间需要 4 分钟。

问题:一群猴子排成一圈,按1,2,…….,n依次编号。然后从第一只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,再把它踢出去………………….,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求:输入m,n,输出最后的那个大王的编号。

很明显,这是一个约瑟夫环的问题,它的特征如下:
1、一群人围在一起坐成环状(例如N个人)
2、从某个编号开始报数(如:K)
3、数到某个数(如:M)的时候,此人出列,下一个人重新报数
4、一直循环,直到所有人出列[3] ,约瑟夫环结束

知道了它的原理,那么我们解决起来也就有针对性了。代码如下:

import java.util.ArrayList;import java.util.List;import java.util.Scanner;public class josephus {
/** * @param args */ public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入总的数目:"); int totalNum = sc.nextInt(); System.out.println("请输入报数的编号:"); int cycleNum = sc.nextInt(); jsoephus_func(totalNum,cycleNum); } private static void jsoephus_func(int totalNum, int cycleNum) { //定义链表 List
list = new ArrayList
();//初始的人数 List
resultlist = new ArrayList
();//点到人 for(int i=1;i<=totalNum;i++){
//把所有的猴子的编号都保存到链表中去 list.add(i); } int count = 0; for(int j =0;j

结果显示如下:

这里写图片描述

说明:

输入8,表示总共有8只猴子,输入2,表示踢出猴子的编号是从2开始的。
首先是编号为2的猴子,然后是编号4,编号6,编号8,编号3,编号7,编号5,最后剩下的就是编号1了。
可以把整个踢出过程打印出来,显示如下:
这里写图片描述

当然啦,这个也可以用递归来做。具体怎么做,这里就不在介绍了,若有兴趣,可自行百度。

转载于:https://www.cnblogs.com/cmderq/p/9130850.html

你可能感兴趣的文章
swappiness参数设置与内存交换
查看>>
修改es最大返回结果数
查看>>
Android实战技巧之六:PreferenceActivity使用详解
查看>>
SUSE12 网卡配置、SSH远程配置、解决CRT密钥交换失败,没有兼容的加密程序
查看>>
平台网盘
查看>>
原生ajax jq跨域
查看>>
在MySQL中操作日期和时间
查看>>
WebService&CXF
查看>>
hibernate框架环境搭建与使用
查看>>
不同大小的字体底部对齐
查看>>
@ControllerAdvice注解的使用
查看>>
pfx2pvk
查看>>
python3 生成随即激活码
查看>>
Codeforces 260 A - A. Laptops
查看>>
Java中System类的相关应用
查看>>
spring mvc(注解)上传文件的简单例子
查看>>
【转】Zend_Json学习
查看>>
洛谷 P3698 [CQOI2017]小Q的棋盘 解题报告
查看>>
洛谷 P1407 [国家集训队]稳定婚姻 解题报告
查看>>
Delphi10.2 Tokyo试用(1)
查看>>