约瑟夫环java代码数组 约瑟夫环c++代码数组

用java在数组中实现约瑟夫环的问题, 要求写明详细注释, 方法最好简单一点, 初学者,

package ysfh;

创新互联是一家专注于网站设计、做网站和成都服务器托管的网络公司,有着丰富的建站经验和案例。

/**

* 【约瑟夫环的问题】

* 有17个人(编号从1到16),按编号依次排列成一个圆环(编号16的接着编号为1 的人),从编号为1 的人开始报数,数到3的人退出圆环,如此循环,最后留下的那个人的编号是什么?

* 1,2,3,4,5,6,7,8,,9,10,11,12,13,14,15,16

* 要求:请用面向对象的思想来处理这个问题并在下面写出具体的代码(可以选择你熟悉的语言,如java/C++/C#等)

* @author Administrator

*

*/

public class Ysfh {

public static void main(String[] args) {

m(3,16);

}

public static void m(int m,int n){

int c = 1;

int[] ns = ntoarray(n);

while(isone(ns) == false){//如果数组中有一个以上的数不为0

for (int i = 0; i ns.length; i++) {

if(ns[i] != 0 ){//等于0的都退出了 所以从所有不等于0的开始

if(c == m){//是第三个数 给他赋值0 并让计数器c从1 开始

ns[i] = 0 ;

c = 1;

}else{//否则继续计数器下一个

c++;

}

}

}

}

//循环输出最后留下的数字

for (int i = 0; i ns.length; i++) {

if(ns[i] != 0){//除0以外的数字 0代表删除

System.out.println(ns[i]);

}

}

}

/**

* 将 n 转换为数字 n=3 {1,2,3}

* @param n

* @return

*/

public static int[] ntoarray(int n){

int[] ns = new int[n];

for (int i = 0; i ns.length; i++) {

ns[i] = i + 1;

}

return ns;

}

/**

* 判断数组里是否只有一个数不为0

* @param ns

* @return

*/

public static boolean isone(int[] ns){

boolean isone = false;

for (int i = 0; i ns.length; i++) {

if(isone == false ns[i] != 0){

isone = true;

}else if(isone == true ns[i] != 0){

return false;

}

}

return isone;

}

}

求解约瑟夫环问题(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 JDK环境中 关于约瑟夫环 怎样将数组连接成环 留代码 急求!!~

数组没法连成环,要想要环形,可以用链表,单项环形链表是个环。


网页题目:约瑟夫环java代码数组 约瑟夫环c++代码数组
本文URL:http://myzitong.com/article/ddicpjp.html