「约瑟夫环java数组」约瑟夫问题数组实现
今天给各位分享约瑟夫环java数组的知识,其中也会对约瑟夫问题数组实现进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java 约瑟夫问题的数组解法
- 2、n个小孩围成一个圈,从一开始数,数到七的人出列,求依次出列的次序. 求用java写
- 3、关于约瑟夫环问题,用java 编写程序,输出n个人出圈的顺序,书上的程序代码如下,但是有几点我搞不明白
- 4、java编程实现约瑟夫问题
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;
}
}
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 编写程序,输出n个人出圈的顺序,书上的程序代码如下,但是有几点我搞不明白
你这个好麻烦啊, 理解 队列 和 桟 的区别
队伍 先进先出 FIFO
桟 先进后出 LIFO
本程序明显是队伍!!!
import java.util.* ;
public class T {
public static void main(String[] args) {
ListInteger list = new LinkedListInteger();
//模拟15个人,编号是1-15
for(int i=1 ; i=15 ; i++) {
list.add(i);
}
//模拟 叫到7的人出圈
show(list , 7);
}
public static void show(ListInteger list , int n){
int i = 1 ;//每次报的数字
int count = 1 ;//记录第几次出圈
while(true){
//当list长度为1的时候代表就剩下1个人
if(list.size()==1){
System.out.println("第"+count+++"次是"+list.get(0));
return ;
}
//每次获取队里第一个人
int value = list.get(0);
//报完数后移开该人
list.remove(0);
//如果报数的人报的数字为n ,则打印
if(i == n) {
i = 1 ;
System.out.println("第"+count+++"次是"+value);
}else {
//如果报数的人报的数字不是n ,将该人排到队伍的后面,以便下次继续叫号
list.add(value);
//产生下次报数的数字
i++ ;
}
}
}
}
java编程实现约瑟夫问题
public class RingTest{
public static void main(String[] args){
System.out.println("程序说明如下:");
System.out.println("由m个人围成一个首尾相连的圈报数。从第一个人开始,从1开始报数,报到n的人出圈,剩下的人继续从1开始报数,直到所有的人都出圈为止。对于给定的m和n,求出所有人的出圈顺序.");
//提示输入总人数
System.out.println("请输入做这个游戏的总人数:");
Scanner sca=new Scanner(System.in);
int m=sca.nextInt();
//提示输入要出圈的数值
System.out.println("请输入要出圈的数值:");
int n=sca.nextInt();
System.out.println("按出圈的次序输出序号:");
//创建有m个值的数组
int[] a=new int[m];
//初始长度,以后出圈一个,长度就减一
int len=m;
//给数组赋值
for(int i=0;ia.length;i++)
a[i]=i+1;
//i为元素下表,j代表当前要报的数
int i=0;
int j=1;
while(len0){
if(a[i%m]0){
if(j%n==0){//找到要出圈的人,并把圈中人数减一
System.out.print(a[i%m]+" ");
a[i%m]=-1;
j=1;
i++;
len--;
}else{
i++;
j++;
}
}else{//遇到空位了,就跳到下一位,但j不加一,也就是这个位置没有报数
i++;
}
}
}
}
关于约瑟夫环java数组和约瑟夫问题数组实现的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-11-26,除非注明,否则均为
原创文章,转载请注明出处。