实习1.2.cpp
来自「单循环存储结构实现约瑟夫环,n个人从1到n编码,然后围坐一圈,每人持有一密码」· C++ 代码 · 共 86 行
CPP
86 行
#include<stdio.h>
#include<iostream.h>
int nm=1;
typedef struct LNode
{
int s;
int sq;
struct LNode *next;
}LNode,*LinkList;
void Init(LinkList &L,int x)
{
L=(LinkList)malloc(sizeof(LNode));
L->s=nm++;
L->sq=x;
L->next=L;
}
void Insert(LinkList &L,int x)
{
LNode *p,*q;
Init(p,x);
p->next=L;
q=L;
while(q->next!=L)
q=q->next;
q->next=p;
}
int Delete(LinkList &L,LinkList &k,int &m)
{
int b;
LNode *p=k;
while(L->next!=k)
L=L->next;
L->next=k->next;
m=k->sq;
b=k->s;k=k->next;
p->next=NULL;
return b;
}
void Joseph(LinkList &L)
{
LinkList p=L;
cout<<"请输入报数上限值:"<<endl;
int m;
cin>>m;
getchar();
while(p->next!=L)
{
for(int i=1;i<m;i++)
p=p->next;
cout<<Delete(L,p,m)<<endl;
}
if(p->next==L)
{
cout<<Delete(L,p,m)<<endl;
}
cout<<Delete(L,p,m)<<endl;
}
int main()
{
LinkList L;
int x;
int n;
cout<<"---------------约瑟夫环实验----------------"<<endl;
cout<<"请输入参加实验的人数: "<<endl;
cin>>n;
getchar();
cout<<"请输入各个人的密码: "<<endl;
cin>>x;
getchar();
Init(L,x);
for(int i=1;i<n;i++)
{
cin>>x;
getchar();
Insert(L,x);
}
Joseph(L);
cout<<"请输入由第几个人开始实验:"<<endl;
cin>>x;
return 2;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?