约瑟夫(顺序).cpp

来自「树的遍历等数据结构程序代码实现」· C++ 代码 · 共 31 行

CPP
31
字号
#include<iostream.h>
#include<string.h>
void joseph(int,int,int []);
void main()
{ cout<<"输入参数:"<<endl;
  int m,n;          //n个人,报的数为m
  
  cout<<"席上总人数n=:";cin>>n;
  cout<<"约定报的数m=:";cin>>m;
  int *L=new int[n];  //创建数组,存储退席序号
  for(int i=1;i<=n;i++)
	  L[i]=i;                   
  cout<<"退席顺序如下: ";
  joseph(m,n,L);
  
  cout<<endl;
}
void joseph(int m,int n,int L[])
{           
  int s=1;                     //设从第1个人开始报数
  for(int j=n;j>1;j--)
  { s=(s+m-1)%j;               //下一个出列人的序号
    if(s==0) s=j;
	int t=L[s];            //暂存出列人原编号
	for(int k=s;k<=j-1;k++)//移动数组数据,删除出列人
		L[k]=L[k+1];
	L[j]=t;                //将出列人移到数组尾
  }
  for(int i=n;i>=1;i--)        //打印出列人编号
	  cout<<L[i];
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?