「约瑟夫环java数组」约瑟夫环数据结构java
本篇文章给大家谈谈约瑟夫环java数组,以及约瑟夫环数据结构java对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、约瑟夫问题求解释(圆桌问题)Java
- 2、约瑟夫环问题的代码
- 3、帮忙看下这个代码。约瑟夫环问题报错。一维数组的。
- 4、java 约瑟夫问题的数组解法
- 5、怎么用java数组实现约瑟夫环
- 6、n个小孩围成一个圈,从一开始数,数到七的人出列,求依次出列的次序. 求用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的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-12-27,除非注明,否则均为
原创文章,转载请注明出处。