约瑟夫问题求解释(圆桌问题)Java

约瑟夫问题求解释(圆桌问题)Java,第1张

while (true) {

for (j = 0; j < m;) //在圈中数m个人

{

i = (i + 1) % n; //判断下一个人是否已离开,因为是环形的遇到最后一个+1时i会变成0

if (a[i] >0) j++; //a[i] >0表示第i个人还没有离开

}

//m个人数好了,这时候下一个就是要离开的

if(k==n) break; //k等于n表示只剩下一个人了,这个人就是最后的获胜者,break跳出循环

Systemoutprintln("No" + a[i] + " is out!");

a[i] = -1; //表示该人离开

k++;

}

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 < nslength; 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 < nslength; i++) {

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

Systemoutprintln(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 < nslength; 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 < nslength; i++) {

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

isone = true;

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

return false;

}

}

return isone;

}

}

public class Byuesefu {

    final static int k = 1;//从k开始

    final static int n = 8;//总共n个人

    final static int m = 3;//数到m时出列

    public static void main(String[] args) {

        int count=n;

        int i;

        int tt=0;

        boolean[] b=new boolean[n];

        for(int j=0;j<blength;j++)b[j]=true;

        for(i=k;count>1;i++){

            if (i==n) i=0;

            if (b[i]==true)

            tt++;

                if (tt==m) {

                tt=0;

                b[i]=false;

                Systemoutprintln(i+"被踢出");

                count--;

                }

            }

        for(i=0;i<blength;i++){

            if(b[i]==true){

                Systemoutprintln("-----");

                Systemoutprintln("还剩"+i+"号");

            }

        }

    }

}

以上就是关于约瑟夫问题求解释(圆桌问题)Java全部的内容,包括:约瑟夫问题求解释(圆桌问题)Java、用java在数组中实现约瑟夫环的问题, 要求写明详细注释, 方法最好简单一点, 初学者,、约瑟夫环问题 java等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10115363.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存