关于约瑟夫环问题,用java 编写程序,输出n个人出圈的顺序,书上的程序代码如下,但是有几点我搞不明白

求大神相助~~publicclassApp_5{publicstaticvoidmain(String[]args){finalintN=13,S=3,M=5;//N为总... 求大神相助~~
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<N;i++)
System.out.print(q[i]+" "); //q[0]=??
}
}
展开
 我来答
love爱有缘
2014-03-05 · TA获得超过1041个赞
知道小有建树答主
回答量:789
采纳率:0%
帮助的人:695万
展开全部

你这个好麻烦啊, 理解 队列 和 桟 的区别

队伍    先进先出  FIFO  

桟       先进后出  LIFO

本程序明显是队伍!!!

import java.util.* ;
 public class T {
 public static void main(String[] args) {
  List<Integer> list = new LinkedList<Integer>();  
   //模拟15个人,编号是1-15  
   for(int i=1 ; i<=15 ; i++) {
     list.add(i);
   }  
   //模拟 叫到7的人出圈  
   show(list , 7);
 } 
 public static void show(List<Integer> 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++ ;
   }
  }
 }
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式