约瑟夫环Java语言代码 数据结构约瑟夫环代码java( 三 )


show(list , 7);
}
public static void show(ListInteger list, int n){
int i = 1 ;//每次报的数字
int count = 1 ;//记录第几次出圈
while(true){
//当list长度为1的时候代表就剩下1个人
if(list.size()==1){
System.out.println("第"+count+++"次是"+list.get(0));
return ;
}
//每次获取队里第一个人
int value = https://www.04ip.com/post/list.get(0);
//报完数后移开该人
list.remove(0);
//如果报数的人报的数字为n ,则打印
if(i == n) {
i = 1 ;
System.out.println("第"+count+++"次是"+value);
}else {
//如果报数的人报的数字不是n ,将该人排到队伍的后面,以便下次继续叫号
list.add(value);
//产生下次报数的数字
i++ ;
}
}
}
}
求解约瑟夫环问题(Java)package 约瑟夫环;
import java.util.LinkedList;
import java.util.List;
/**
* 约瑟夫环问题的一种描述是:编号为1.2.3…….n的n个人按顺时针方向围坐一圈 ,每人手持一个密码(正整数),
* 开始任意选一个整数作为报数上限值,从第一个人开始顺时针自1开始顺序报数,报到m时停止报数 。报m的人出列,
* 将他的密码作为新的m值,从他顺时针下一个人开始重新从1开始报数,
* 如此下去直到所有的人全部都出列为止 。试设计程序实现,按照出列的顺序打印各人的编号 。
* @author Administrator
*
*/
public class Question2 {
class person {
int password;
int number;
int state = 1;
public person(int password, int number) {
this.password = password;
this.number = number;
}
public person(int number){
this.number = number;
}
}
public int ListLength(Listperson list) {
int count = 0;
if (list != null) {
for (person p : list) {
if (p.state != 0) {
count++;
}
}
}
return count;
}
public void cacle() {
// 初始化数据
Listperson list = new LinkedListperson();
list.add(new person(3,1));
list.add(new person(1,2));
list.add(new person(7,3));
list.add(new person(2,4));
list.add(new person(4,5));
list.add(new person(8,6));
list.add(new person(4,7));
int position = -1;//初始位置
int m = 20; //第一次报多少的人出来
int count = 0;//已经报了多少人
while (ListLength(list) != 0) {
position = (position + 1) % list.size();// 位置定位
if (((person) list.get(position)).state != 0) {
count++;
}
if (count == m) {
person p = list.get(position);
System.out.print(p.number+" ");
p.state = 0;
m = p.password;
list.set(position, p);
count = 0;
}
}
}
public static void main(String[] args) {
Question2 q= new Question2();
q.cacle();
}
}
跟这差不多的 。
【约瑟夫环Java语言代码 数据结构约瑟夫环代码java】关于约瑟夫环Java语言代码和数据结构约瑟夫环代码java的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。