约瑟夫环问题:设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,m为任意一个正整数.从第一个用C++怎么实现,求助……
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/15 05:42:56
约瑟夫环问题:设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,m为任意一个正整数.从第一个用C++怎么实现,求助……
约瑟夫环问题:设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,m为任意一个正整数.从第一个
用C++怎么实现,求助……
约瑟夫环问题:设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,m为任意一个正整数.从第一个用C++怎么实现,求助……
#include
#include
#define maxsize 1000
typedef int ElemType;
typedef struct List//定义结构体链表
{
ElemType data[maxsize];
int length;
}*SqList;
SqList InitList( )//初始化顺序表
{ SqList L;
\x09L=(SqList )malloc(sizeof(List));//分配存放线性表的空间,使用动态存储分配.
\x09return L;
}
void CreateList(SqList L)//创建链表
{
\x09int i,n;
printf("总序号为:");
scanf("%d",&n);
\x09for(i=0;idata[i]=i+1;
\x09printf("%d",L->data[i]);
\x09}
\x09L->length=n;
}
void josephus(SqList L)//实现出列输出
{
\x09int i,j,t,m;
\x09t=0;
\x09printf("出列序号为:");
\x09scanf("%d",&m);
printf("出列顺序:\n");
\x09for(i=L->length;i>=1;i--)
\x09{
\x09\x09t=(t+m-1)%i;//出列数组元素的下标
\x09\x09printf("%d",L->data[t]);
\x09\x09for(j=t+1;jdata[j-1]=L->data[j];//删除出列元素
\x09}
}
void main()
{
SqList L;
\x09L=InitList();
CreateList(L); //调用创建链表函数以实现该功能
\x09josephus(L);//实现报数的出列
}