java顺序打印约瑟夫环_关于约瑟夫环问题,用java 编写程序,输出n个人出圈的顺序,书上的程序代码如下,但是有几点我搞不明白...
关于约瑟夫环问题,用java 编写程序,输出n个人出圈的顺序,书上的程序代码如下,但是有几点我搞不明白
关注:269 答案:1 mip版
解决时间 2021-01-28 18:01
提问者萬裏夢魂
2021-01-28 13:56
求大神相助~~
public class App_5
{
public static void main(String[] args)
{
final int N=13,S=3,M=5;//N为总人数,从第S个人开始报数,报数到M 的为出圈
int[] p=new int[N];//数组p用来标识已出圈的人
int[] q=new int[N];//数组q用于存放出圈顺序
int i,j,k,n=0;//n=?
k=S-2;//k从1开始数出圈人你的下标??【什么意思,搞不明白】
for(i=1;i<=N;i++)
{
for(j=1;j<=M;j++)//从1到M报数,计算 出圈人 的下标 (怎么计算??)
{
if(k==N-1)//当出圈人的下标达到末尾时
k=0;//出圈人的下标从0开始??【为什么?】
else
k++;//否则下标+1
if(p[k]==1)//若p[k]=1,说明下标为k的人已出圈【为什么,什么意思??】
j--;
}
p[k]=1;//将下标为k的数组元素置1,表示其出圈 【??】
q[n++]=k+1;
}
//将上行改为System.out.print((k+1)+"");后可去掉下面三行输出语句
System.out.println("出队顺序为:");
for(i=0;i
System.out.print(q[i]+"");//q[0]=??
}
}
最佳答案
二级知识专家不了解我就别说我变了
2021-01-28 14:50
你这个好麻烦啊, 理解 队列 和 桟 的区别
队伍 先进先出 FIFO
桟 先进后出 LIFO
本程序明显是队伍!!!
import java.util.* ;
public class T {
public static void main(String[] args) {
List list = new LinkedList();
//模拟15个人,编号是1-15
for(int i=1 ; i<=15 ; i++) {
list.add(i);
}
//模拟 叫到7的人出圈
show(list , 7);
}
public static void show(List 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++ ;
}
}
}
}
我要举报
如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
→点此我要举报以上信息!←
推荐资讯
大家都在看