约瑟夫环简单java代码 约瑟夫环代码详解

用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解决约瑟夫环的编程(接图片“显示“出环者”次序并给出最终的赦免者”)

import java.util.ArrayList;  

import java.util.List;  

import java.util.Scanner;  

public class demo {  

public static void main(String[] args) {  

Scanner scanner = new Scanner(System.in);  

System.out.print("请输入总人数:");  

int totalNum = scanner.nextInt();  

System.out.print("请输入报数的大小:");  

int cycleNum = scanner.nextInt();  

System.out.print("请输入第几个报数:"); 

int cur = scanner.nextInt();  

yuesefu(totalNum, cycleNum ,cur); 

scanner.close();

}  

public static void yuesefu(int totalNum, int countNum,int cur) {  

// 初始化人数  

ListInteger start = new ArrayListInteger();  

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

start.add(i);  

}  

//从第K个开始计数  

int k = cur-1;  

while (start.size() 0) {  

k = k + countNum;  

//第m人的索引位置  

k = k % (start.size()) - 1;  

// 判断是否到队尾  

if (k  0) {  

System.out.println(start.get(start.size()-1));  

start.remove(start.size() - 1);  

k = 0;  

} else {  

System.out.println(start.get(k));  

start.remove(k);  

}  

}  

}  

}

求java代码是《约瑟夫环问题-猴子选大王》

无界面!

import java.util.LinkedList;

import java.util.List;

import java.util.Scanner;

public class LinkCircle {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner in = new Scanner(System.in);

int n, k, m, i, j, count, p, q;

int[] a = new int[100];

ListInteger array = new LinkedListInteger();

p = 0;

q = 0;

count = 0;

n = in.nextInt();

m = in.nextInt();

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

array.add(i + 1);

System.out.printf(i != n - 1 ? "%d " : "%d\n", array.get(i));

}

int pos = -1;

int x = 0;

while(array.size() != 1)

{

//x = array.get(pos);

pos += m ;

if(pos = array.size())

{

pos = pos % array.size();

}

System.out.println("remove pos:" + (pos + 1) + ", value:" + array.get(pos));

array.remove(pos--);

System.out.print("Array : ");

for (i = 0; i array.size(); i++) {

System.out.printf(i != array.size() - 1 ? "%d " : "%d\n\n", array.get(i));

}

}

System.out.println("res:" + array.get(0));

}

}


当前名称:约瑟夫环简单java代码 约瑟夫环代码详解
文章网址:http://ybzwz.com/article/ddcoehp.html