约瑟夫环java代码讲解 数据结构约瑟夫环代码java

急!急!急!Java怎么用递归实现约瑟夫环?求试验成功的、初级的代码

public class TestJosephus {

专业从事企业网站建设和网站设计服务,包括网站建设、申请域名雅安服务器托管、企业邮箱、微信公众号开发、微信支付宝成都小程序开发、成都APP应用开发、软件开发、等服务。公司始终通过不懈的努力和以更高的目标来要求自己,在不断完善自身管理模式和提高技术研发能力的同时,大力倡导推行新经济品牌战略,促进互联网事业的发展。

public static void main(String[] args) {

//留几个人

int alive = 2;

//总人数

int total = 41;

//自杀者报数

int killMan = 3;

Josephus(alive, total, killMan);

}

/**

 * @param alive 存活的人初始位置序号//留几个人

 * @param total 总人数

 * @param killMan 自杀者报数

 */

public static void Josephus(int alive, int total, int killMan) {

int []man = new int[total];

int count = 1;

int i = 0;

int pos = -1;

while (count = total) {

do {

pos = (pos+1)%total;

if (man[pos] == 0) {

i++;

}

if (i == killMan) {

i = 0;

break;

}

} while (true);

man[pos] = count;

System.out.print("第 " + (pos+1) + " 个人自杀!约瑟夫环编号为:" + man[pos]);

if (count % 2 != 0) {

System.out.print(" - ");

}else {

System.out.println(" -= ");

}

count++;

}

System.out.println();

System.out.println("这 " + alive +" 个需要存活的人初始位置应排在以下序号:");

alive = total - alive;

for (i = 0; i  total; i++) {

if (man[i]  alive) {

System.out.println("初始编号:" + (i+1) + ",约瑟夫环编号:" + man[i]);

}

}

System.out.println();

}

}

怎么用java数组实现约瑟夫环

用java数组实现约瑟夫环

package Josephround;

public class Joseround {

int sit;

int flagjo=0;

Joseround(){};

Joseround(int x){

sit=x;

}

void setflag(int x){

flagjo=x;

}

}

package Josephround;

public class Inijose {

Joseround jo[];

static int length=0;

Inijose(){};

Inijose(int x){

jo=new Joseround[x];

for(int i=0;ix;i++){

jo[i]=new Joseround(i+1);//创建对象数组

length++;

}

}

void delete(int n){

for(int i=n;ilength-1;i++){

jo[i]=jo[i+1];

}

length--;

}

}

package Josephround;

import java.util.Scanner;

public class Text {

public static void main(String[] args) {

int m,n;

System.out.println("input m");

Scanner m1=new Scanner(System.in);

m=m1.nextInt();

System.out.println("input n");

Scanner n1=new Scanner(System.in);

n=n1.nextInt();

int temp=0;

int x=0;

Inijose joseph=new Inijose(n);

while(joseph.length!=0){

for(int i=1;i=m;i++){

joseph.jo[x].setflag(i);

if(joseph.jo[x].flagjo==m){

System.out.println(joseph.jo[x].sit);

joseph.delete(x);

x--;

}

if(xjoseph.length-1) x++;

else x=0;

}

}

}

}

求解约瑟夫环问题(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
网站路径:http://pwwzsj.com/article/ddjpopp.html