约瑟夫环问题求解啊!
发布网友
发布时间:2022-06-15 23:20
我来回答
共1个回答
热心网友
时间:2023-10-29 23:06
那说明程序错误,我刚做过一个Node.h
typedef char ElemType;
typedef struct Node{
ElemType data;
struct Node *next;
}Node;
a.h
//顺时针生成一个编号为1,2,3,4,...,n的n个人的无头结点的单向循环链表。
Node*LinkList(int n){
Node*L=new Node;
Node*p=L;
p->data=1;//无头结点
p->next=NULL;
for(int i=2;i<=n;i++){
Node*q=new Node;
q->data=i;
q->next=NULL;
p->next=q;
p=q;
}
p->next=L;//完成此循环链表
return L;//返回链表
}
b.h
//创建一个输出初始号码的链表
void set(Node*L){
if(!L) return ERROR;
if(L){
Node*p=L;
cout<<p->data<<' ';
while(p->next!=L){
p=p->next;
cout<<p->data<<' ';
}
}
cout<<endl;
}
//主函数,以及约瑟夫环的实现
int main()
(
int n;
int passnum[20];
cout<<“请输入人个数:”;
cin>>n;
Node*mylist=LinkList(n);
cout<<”初始编号是:“;
set(mylist);//调用set函数,set函数调用循环链表并实现初始编号的输出。
cout<<”请输入初始密码是:“;
cin>>passnum[0];
if(passnum[0]<1) return -1;
//用for循环实现n个人密码的输入
for(int j=1;j<=n;j++)
{
cout<<”输入第”<<j<<”个人的密码:”;
cin>>passnum[j];
}
cout<<”出列顺序是:”;
int m=0;
Node *p=mylist;
Node *q=new Node;
//约瑟夫环的实现
while(q->next!=q)
{
for(int k=1;k<passnum[m];k++)
{
q=p;
p=p->next;
}
cout<<p->data<<' ';
m=p->data;
q->next=p->next;
free (p);
p=q->next;
}
cout<<p->data<<' ';
cout<<endl;
return 0;
}追问谢谢你,不过我还是学生,没接触过c++,只会c语言,能麻烦你用c语言把我的源程序改一下吗?尽量标记出改的地方,谢谢了!