回 帖 发 新 帖 刷新版面

主题:[讨论]Josephus的c++问题

约瑟夫(josephus)环是这样的:假设有n个小孩坐成一个环,假如从第一个小孩开始数,如果数到m个小孩,则该小该离开,问最后留下的小孩是第几个小孩?例如:总共有6个小孩,围成一圈,从第一个小孩开始,每次数2个小孩,则游戏情况如下:
    小孩序号:1,2,3,4,5,6
    离开小孩序号:2,4,6,3,1
最后获胜小孩序号:5

#include<iostream.h>
int Josephus(int *Child,int n,int m);
void main()
{
int *allChild,j,k,l;
cin>>j>>k;

  if((allChild= new int[j])!=NULL)
  {
    for(l=0;l<j;l++)
    {  
     cout<<l+1<<",";
     allChild[l]=l+1;
    }
    cout<<endl;
    cout<<Josephus(allChild,j,k);
  }
}

int Josephus(int *Child,int n,int m)
{
int i=-1,j=0,k=1;
while(1)
{
  for(j=0;j<m;)
  {
   i=(i+1)%n;    
   if(Child[i]!=-1) 
    j++;
   
  }

   if(k==n)                        
    break;                        
   cout<<Child[i]<<",";  

   Child[i]=-1;         
   k=k+1;

}
cout<<endl;
return(Child[i]);    
}
中的j,k,m,n,l,allchild,child 代表什么意思?

回复列表 (共2个回复)

沙发

变量用的很差,没有标志性,建议找写代码的人去问问,如果是教材上的代码一般教材上都有注释

板凳

#include<iostream.h>
int Josephus(int *Child,int n,int m);//函数声明
void main()
{
int *allChild,j,k,l;//*allchild 定义数组 j是总人数 k是轮回的个数 l是for循环的一个变量
cin>>j>>k;//输入 j是总人数 k是轮回的个数

  if((allChild= new int[j])!=NULL)
  {
    for(l=0;l<j;l++)
    {  
     cout<<l+1<<",";
     allChild[l]=l+1;
    }
    cout<<endl;
    cout<<Josephus(allChild,j,k);
  }
}

int Josephus(int *Child,int n,int m)//函数体 
{
int i=-1,j=0,k=1;//i是一个用于递增的变量 j是一个for的变量 Child声明数组 n是轮回的个数 m是总人数
while(1)
{
  for(j=0;j<m;)
  {
   i=(i+1)%n;    
   if(Child[i]!=-1) 
    j++;
   
  }

   if(k==n)                        
    break;                        
   cout<<Child[i]<<",";  

   Child[i]=-1;         
   k=k+1;

}
cout<<endl;
return(Child[i]);    
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册