博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
约瑟夫算法 Java实现
阅读量:2432 次
发布时间:2019-05-10

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

约瑟夫环:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。

public class YuesefuTest {		public static void main(String[] args) {		int totalNum = 10;		int countNum = 3;				yuesefuByMyself(totalNum, countNum);		yuesefu(totalNum, countNum);	}		/**	 * 此方法 k 为 list 的下标	 * @param totalNum	 * @param countNum	 */	public static void yuesefuByMyself( int totalNum,int countNum){//		初始化人数		List
start = new ArrayList
(); for(int i=1; i<=totalNum; i++){ start.add(i); } // 此处的k为list的下标,开始报数人的下标,第一个人为0,第n个人为n-1 int k = 0; while(start.size()>0){// 下一个出列人的下标,因为是从当前报数人开始数,所以减1为下一个出列人的下标 k = k + countNum -1; // 当 下标+1 超过了 list 的size if(k + 1>start.size()){// 当size 为 10 ,下标要取 10 ,最大下标为9,应该取 list 的 第一个,即下标为0,// 同理,直接取余即可为正确下标 k = k % start.size(); } System.out.print(start.get(k)+","); // 出列,下一个开始报数人的下标即为出列人的下标 start.remove(k); } System.out.println(); } public static void yuesefu(int totalNum,int countNum){// 初始化人数 List
start = new ArrayList
(); for(int i=1; i<=totalNum; i++){ start.add(i); } // 从第K个开始计数 int k = 0; while(start.size()>0){ k = k + countNum;// 第m人的索引位置 k = k % (start.size()) -1;// 判断是否到队尾 if(k<0){ System.out.print(start.get(start.size()-1)+","); start.remove(start.size()-1); k = 0; } else { System.out.print(start.get(k)+","); start.remove(k); } } System.out.println(); } }

你可能感兴趣的文章
关系型数据库设计:三大范式的通俗理解
查看>>
Hibernate常见面试题
查看>>
如何写一份优秀的java程序员简历
查看>>
如何避免软件行业的薪资天花板?
查看>>
Java知识体系最强总结(2020版)
查看>>
MyBatis与Hibernate区别
查看>>
笔记︱风控分类模型种类(决策、排序)比较与模型评估体系(ROC/gini/KS/lift)
查看>>
MySQL存储引擎之MyISAM与InnoDB区别
查看>>
Python numpy小练习
查看>>
Linux命令英文解释(按英文字母顺序)
查看>>
秋招面试准备-数据库知识
查看>>
数据分析岗-机器学习相关知识
查看>>
分类模型的效果评估
查看>>
深入理解什么是Java双亲委派模型
查看>>
MySQL优化Limit查询语句
查看>>
轻松入门MySQL主从复制原理
查看>>
SpringCloud全家桶---Zuul网关
查看>>
基于zuul和ribbon的灰度发布方案
查看>>
JVM常用垃圾收集器参数说明
查看>>
MySQL索引基础知识梳理
查看>>