java约瑟夫问题代码 约瑟夫问题程序

java编程实现约瑟夫问题public class RingTest{
public static void main(String[] args){
System.out.println("程序说明如下:");
System.out.println("由m个人围成一个首尾相连的圈报数 。从第一个人开始,从1开始报数 , 报到n的人出圈,剩下的人继续从1开始报数,直到所有的人都出圈为止 。对于给定的m和n , 求出所有人的出圈顺序.");
//提示输入总人数
System.out.println("请输入做这个游戏的总人数:");
Scanner sca=new Scanner(System.in);
int m=sca.nextInt();
//提示输入要出圈的数值
System.out.println("请输入要出圈的数值:");
int n=sca.nextInt();
System.out.println("按出圈的次序输出序号:");
//创建有m个值的数组
int[] a=new int[m];
//初始长度,以后出圈一个,长度就减一
int len=m;
//给数组赋值
for(int i=0;ia.length;i)
a[i]=i 1;
//i为元素下表,j代表当前要报的数
int i=0;
int j=1;
while(len0){
if(a[i%m]0){
if(j%n==0){//找到要出圈的人,并把圈中人数减一
System.out.print(a[i%m] "");
a[i%m]=-1;
j=1;
i;
len--;
}else{
i;
j;
}
}else{//遇到空位了,就跳到下一位 , 但j不加一,也就是这个位置没有报数
i;
}
}
}
}
用java解决约瑟夫问题Java约瑟夫问题: n个人(不同id)围成一个圈,从startId(任意数)个开始报数m(任意数)个数,数m的人出列排成新队列 , m清零,然后又从下一个人开始数m个数开始 , 数到m就出列接在新队列尾部,如此重复,知道所有人都出列为止 。
package list;
import java.util.ArrayList;
* 打印 出列后的新队列
*
* eg
* int n = 10;//总人数
* int m = 3;//报数个数
* int startIndex = 1;//起点位置
* @author Hulk201403 20
*
*/
public class JosephListTest {
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
JosephListTest test = new JosephListTest();
int n = 10; //总人数
int m = 3; //报数个数
int startIndex = 12; //起点位置
System.out.println("JosephListTest: n= "n", m= "m
", startIndex= "startIndex"\n\nQUEUE RESULT:");
ArrayListPerson queueList = test.queuePreson(n, m, startIndex);
for (Person person : queueList) {
System.out.println("OUT person: "person);
}
System.out.println("use time= "
(System.currentTimeMillis() - startTime));
}
private ArrayListPerson queuePreson(int n, int m, int startIndex) {
ArrayListPerson queueList = null;
PersonList list = createList(n);
//list.search();
if ((list != null)(list.head != null)) {
queueList = new ArrayListJosephListTest.Person();
PNode pNode = list.head;
if (startIndex0) {
startIndex = startIndex % n;
pNode = list.getNode(startIndex);
} else {
pNode = list.head;
}
int count = 1;
while (list.size0) {
Person outPerson = null;
//find
if (count == (m - 1)) {
//delete next node
Person prev = pNode.person;
outPerson = list.remove(prev);
queueList.add(outPerson);
//System.out.println("OUT person: "outPerson", size= "list.size);
count = 0;
}
pNode = pNode.next;
count;
}
}
return queueList;
}
private PersonList createList(int n) {
PersonList list = new PersonList();
for (int i = 0; in; i) {
Person person = new Person(i, "name_"(i1));
list.add(i, person);
}
return list;
}
public class PersonList {
PNode head = null;
int size = 0;
public PersonList() {
}
public PersonList(Person person) {
head = new PNode(person, head);
size;
}
public PersonList(PNode head) {
this.head = head;
head.setNext(head);
size;
}
public PNode getHead() {
return head;
}
public void setHead(PNode head) {
this.head = head;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public void size(int size) {
this.size = size;
}
public boolean isEmpty() {
return this.size = 0;
}
public void initHead(Person person) {
if (size == 0) {
head = new PNode(person, head);
} else {
PNode no = head;
head = new PNode(person, no);
}
size;
}
public void add(int index, Person person) {
if (size == 0) {
head = new PNode(person, head);
head.setNext(head);
//System.out.println("head: "head);
} else {
if (index0) {
index = 0;
}
if (indexsize) {
index = size;
}
PNode no = head;
for (int i = 0; i(index - 1); i) {
no = no.next;
}
PNode newNode = new PNode(person, no.next);
no.next = newNode;
}
size;
}
public Person delete(int index) {
PNode pNode = remove(index);
if ((pNode != null)(pNode.next != null)) {
return pNode.next.person;
}
return null;
}
public PNode remove(int index) {
if (size == 0) {
return null;
} else {
if ((index0) || (index = size)) {
return null;
}
}
PNode no = head;
for (int i = 0; i(index - 1); i) {
no = no.next;
}
no.next = no.next.next;
size--;
if ((no != null)(no.next != null)) {
return no.next;
}
return null;
}
【java约瑟夫问题代码 约瑟夫问题程序】/**
* remove next node of person node, and return the deleted person
* @param prePerson
* @returnremoved Person
*/
public Person remove(Person prePerson) {
if (prePerson == null) {
return null;
}
if (size == 0) {
return null;
}
PNode preNode = head;
int index = -1;
for (int i = 0; isize; i) {
if (preNode.person.id == prePerson.id) {
index = i;
break;
} else {
preNode = preNode.next;
}
}
Person remPerson = null;
if (size = 1) {
//only one node, get its person and set it as null
remPerson = preNode.person;
preNode = null;
} else {
//preNode.next.person is dest one
remPerson = preNode.next.person;
preNode.next = preNode.next.next;
}
size--;
//System.out.println("deleteing index= "index" :"remPerson", size= "size);
return remPerson;
}
public int update(Person src, Person dest) {
if (src =https://www.04ip.com/post/= null) {
return -1;
}
int index = -1;
PNode no = head;
for (int i = 0; isize; i) {
if (src.id == no.person.id) {
no.person = dest;
break;
} else {
no = no.next;
}
}
return index;
}
public boolean set(int index, Person person) {
if (person == null) {
return false;
}
if (size == 0) {
return false;
} else {
if ((index0) || (index = size)) {
return false;
}
}
PNode no = head;
for (int i = 0; iindex; i) {
no = no.next;
}
no.person = person;
return true;
}
public Person get(int index) {
PNode no = getNode(index);
if (no != null) {
return no.person;
}
return null;
}
public PNode getNode(int index) {
if (size == 0) {
return null;
} else {
if ((index0) || (index = size)) {
return null;
}
}
PNode no = head;
for (int i = 0; iindex; i) {
no = no.next;
}
return no;
}
public void search() {
int sizeLong = size;
PNode no = head;
for (int i = 0; isizeLong; i) {
System.out.println("search index= "i","no);
no = no.next;
}
}
}
public class PNode {
Person person;
PNode next = null;
public PNode() {
}
public PNode(Person person) {
this.person = person;
}
public PNode(Person person, PNode next) {
this.person = person;
this.next = next;
}
@Override
public String toString() {
return "PNode [person="person.id", next="next.person.id
"]";
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
public PNode getNext() {
return next;
}
public void setNext(PNode next) {
this.next = next;
}
}
public class Person {
int id = 0;
String name = "";
public Person() {
}
public Person(int id, String name) {
super();
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "Person [id="id", name="name"]";
}
}
}
怎么用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约瑟夫问题代码和约瑟夫问题程序的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读