「约瑟夫环java数组」约瑟夫环数据结构java

博主:adminadmin 2022-12-27 12:30:09 57

本篇文章给大家谈谈约瑟夫环java数组,以及约瑟夫环数据结构java对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

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

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跳出循环

System.out.println("No." + a[i] + " is out!");

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

k++;

}

约瑟夫环问题的代码

首先,这个代码输出的是,约瑟夫环到达的最后位置。输出结果是15。

//把iostream这个文件中的内容复制到这个地方。

#includeiostream

using namespace std;

int main()

{

//定义一个常量的整形100,表示人的个数。

const int n=100;

//定义约瑟夫环的参数。

int m=30;

//定义一个数组,用于计算约瑟夫环的位置。

int a[n];

//给数组赋值,让数组的每个值就是这个元素的编号。

for(int j=0;jn;j++)

a[j]=j+1;

//定义一个标志k,当K等于N的时候,表示到达约瑟夫环的最后位置。

int k=1;

int i=-1;

while(1)

{

for(int j=0;jm;)

{

//不停的取数组的下一个元素。

i=(i+1)%n;

//如果这个元素没有被标记为0,说明这个位置还没有被排除,j加1,进入下一个循环

if(a[i]!=0)

j++;

}

//如果标志K等于n,说明约瑟夫环的循环到达最后一个位置,跳出While死循环。

if(k==n)

break;

//否则,把这个位置的元素设为零,标志它被排除。

a[i]=0;

//标志+1。

k++;

}

//输出约瑟夫环到达的最后一个位置。

couta[i]endl;

return 0;

}

帮忙看下这个代码。约瑟夫环问题报错。一维数组的。

问题出在数组下表越界,但是我忘了约瑟夫环是怎么弄得了,具体讲就是j+i的值不能比你声明的数组a[12]还要大,刚才我试了下,在最内层的循环执行第2次时,j+i的值为13,产生了越界

java 约瑟夫问题的数组解法

public class 约瑟夫问题 {

  public static void main(String[] args) {

    int[] a = new int[13];

    int start = 0;

    int n = 5;

    while (圈里是否还有人(a)) {

      start = 出圈(start, n, a);

    }

  }

  private static int 出圈(int start, int n, int[] a) {

    int i = start;

    while (n  0) {

      while (a[i] == 1) {

        i = (i + 1) % a.length;

      }

      i = (i + 1) % a.length;

      n--;

    }

    i = (i + a.length - 1) % a.length;

    a[i] = 1;

    System.out.println(i);

    return i;

  }

  private static boolean 圈里是否还有人(int[] a) {

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

      if (a[i] == 0)

        return true;

    }

    return false;

  }

}

怎么用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;

            }

        }

         

    }

 

}

n个小孩围成一个圈,从一开始数,数到七的人出列,求依次出列的次序. 求用java写

这个问题是很经典的编程问题,叫约瑟夫环问题,我之前有写程序,所以直接拷给你吧,我初始的n值为13,你也可以自己修改

//YueSeFu.java

public class YueSeFu {

public static void main(String[] args)

{

final int n=13,s=1,m=5;//n为总人数,从第1个人开始报数,报数到m的出圈

int[] p=new int[n];//数组p用于标记已出圈的人

int[] q=new int[n];//数组q存放出队的顺序

int i,j,k,N=0;

k=s-2;//k从1开始数出圈人的下标

for(i=1;i=n;i++)

{

for(j=1;j=m;j++)//从1到m报数,计算出圈人的下标k

{

if(k==n-1)//当出圈人的下标达到末尾时

{

k=0;//出圈人的下标从0开始

}

else

k++;//否则下标+1

if(p[k]==1)//若平p[k]=1,说明下标为k的人已出圈

{

j--;//由于让过已出圈的人,所以j要-1,以保证每次数过m个人

}

}

p[k]=1;//将下标为k的数组元素置1,表示出圈

q[N++]=k+1;//将下标为k的人的编号k+1,存入数组元素q[N]中

}

System.out.println("出圈顺序为:");

for(i=0;in;i++)

{

System.out.print(q[i]+" ");

}

}

}

关于约瑟夫环java数组和约瑟夫环数据结构java的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-27,除非注明,否则均为首码项目网原创文章,转载请注明出处。