`
bo_hai
  • 浏览: 553512 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

用JAVA 解决 约瑟夫环问题的两种办法

 
阅读更多

问题:n = 7人坐在一圈,从1开始报数,报到m = 20的人出列,将他的密码作为新的m,直到所有的人出列。密码依次为:3、1、7、2、4、8、4。

使用JAVA数组实现:

public static void main(String[] args) {
	int m = 20;
	Character[] people = {'A','B','C','D','E','F','G'};
	int length = people.length;
	int num = length;
	Integer[] password = {3,1,7,2,4,8,4};
	int index = 0;
	int position = 1;
	while (num > 0) {
		if (m == position) {
			num --;
			System.out.print(people[index]);
			System.out.print('\t');
			people[index] = null;
			position = 0;
			m = password[index];
		}
		index = (++index % length);
		if (people[index] != null) {
			position ++;
		}
	}
}

 使用LinkedList实现:

public static void main(String[] args) {
	char[] p = {'A','B','C','D','E','F','G'};
	int[] w = {3,1,7,2,4,8,4};
	List<Character> people = new LinkedList<Character>();
	List<Integer> password = new LinkedList<Integer>();
	for (int i = 0; i < w.length; i++) {
		people.add(p[i]);
		password.add(w[i]);
	}
	
	int index = 0 ;
	int position = 1;
	int num = people.size();
	int m = 20;
	while (num > 0) {
		if (position == m) {
			System.out.print(people.remove(index));
			System.out.print('\t');
			m = password.remove(index);
			num --;
			position = 1;
			if (index >= people.size()) {
				index = 0;
			}
		} else {
			if (num > 0) {
				if (index >= people.size() -1) {
					index = 0;
				} else {
					index ++;
				}
				position ++;
			}
		}
	}
}

 上面是我的实现方法。一定还有更好的解决方法。欢迎大家指点。

分享到:
评论

相关推荐

    java顺序表实现约瑟夫环的两种方法

    通过java顺序表实现约瑟夫环的两种方式: 1.通过数组移动 2.通过记录出对列的人员下标,下次查数时跳过

    约瑟夫环问题求解代码code.docx

    约瑟夫环问题描述:编号为1,2,…,n的n个人按顺时针方向围成一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始报数,报到m时停止报数,报m的人出列,将...

    java源码包---java 源码 大量 实例

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java源码包4

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java源码包3

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java源码包2

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    JAVA上百实例源码以及开源项目

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    JAVA上百实例源码以及开源项目源代码

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    约瑟夫问题(集成了数组方法和链表方法)

    此资源属于算法分析课程的实验(本程序的两种实现方法都使用了相同的界面来输出,所以单看界面是看不出其中的不同之处的,不同之处体现在dao包里面的源文件里)只供学习使用。本人很少上CSDN,有兴趣,有需要的话...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java从网络取得文件 1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 Java存储与读取对象 1个目标文件 如题 Java调色板面板源代码 1个目标文件 摘要:Java源码,窗体界面,调色板 使用Java语言编写的一款...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java从网络取得文件 1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 Java存储与读取对象 1个目标文件 如题 Java调色板面板源代码 1个目标文件 摘要:Java源码,窗体界面,调色板 使用Java语言编写的一款...

    达内 coreJava 习题答案

    //此处用 continue也可以,只是效率低一点 System.out.print(" "+k+"X"+j+"="+j*k); } System.out.println(); } } } 6、输出所有的水仙花数,把谓水仙花数是指一个数3位数,其各各位数字立方和等于其本身,...

    leetcode分类-Leetcode:力码

    leetcode 分类力码 一些值得回顾的问题分类 算法 字符串算法 字符串搜索:028(通过基本搜索;考虑 KMP) 635 弦有可比性!...数组求和问题 ...的两个排序数组的中位数 ...原来的约瑟夫问题:消除一个,跳过一个,圈起来。 记

    matlab代码写错重新写-opengl-network-model:opengl网络模型

    1/23/2013-(进入实验阶段)-已实现六边形圆柱逻辑,但仍处于Hibernate状态-TODO:另一种构造三角形数组的方法-TODO:让应用使用这些新坐标-((((不确定是否六边形将作为六边形出现)))) iOS 1/22/2013--大幅...

Global site tag (gtag.js) - Google Analytics