您的位置 首页 百科问答

约瑟夫来自环问题

问题补充说明:想在这个程序的基础上加上每个人的性别怎么加#include typedef struct LNode { int data;//密码int i;//编号struct LNode *next; }LNode, *LinkList; int CreateList(LinkList &L,int a[],int n) { LinkList s,r;int i; r=L; for(i=1;i<=n;i++) { s=(LinkList )malloc(sizeof(LNode)); s->data=a[i]; s->i=i; if(i==1) { L=s; s->next=s; r=s;//尾指针指向当前元素 } else { s->next=r->next; r->next=s; r=s;} } return 1; } int ListDelete_L(LNode *L) { if(L->next==L)//只剩一个结点{ printf("%d\n",L->i); free(L); return 0; } LNode *p; p=L->next;//p指向要删除元素的下一个结点while(p->next!=L) p=p->next; LNode *q=L;//q指向需要被删除的元素结点int e=L->i; p->next=L->next; free(q); printf("%d ",e); return 1; } int FindNode(LinkList L,int x) { LinkList p=L; LinkList q; for(int i=1;inext; q=p->next;//下一次循环的起始位置x=p->data; if(ListDelete_L(p)) FindNode(q,x); return p->i; } int main() { int n,m; LinkList L; printf("请输入人数和初始密码:"); scanf("%d %d",&n,&m); if(n<0||m<0) { printf("输入的人数和初始密码不能为负数!\n"); return 0; } int a[100]; printf("请输入每个人的密码:"); for(int i=1;i<=n;i++) scanf("%d",&a[i]); if(CreateList(L,a,n)) { printf("\n"); printf("正确的出列顺序为:"); FindNode(L,m); printf("\n"); } return 0; }

约瑟夫来自环问题

/*约瑟夫环问题—里油装仅于煤怕—链表模拟*/

#i市nclude

#include

typedefstructnode

{

intid;

structnode*next;

}node;

intmain()

{

intm,n,i;

node*p,*q,*head;

while(~scanf("%d%d",&m,&n))

{

//创建含n个节点的循环链表,初始化编号

head=(no做移de*)malloc(sizeof(node段效目经推术阳湖才讨));

head->id=1;

q=head;

for(i刘刻施置局亚婷婷路测=2;i<=n;++i)

{

p=(node*)malloc(sizeof(node));

p->i粮支个角流输格非护d=i;

q->next=p;

q=p;

}

q->next=head;

//模拟退出过程

i=1;

p=head;

while(p->next!=p)

{

q=p;

p=p->next;

++i;

i家工仍飞息门f(i==m)//delete(p);i告简审引案口尽已势台=1;

{

q->ne并行急干房洋田xt=p->next;

free(p);

p=q->next;

i=1;

}

}

//打印剩余节点的校检室少超圆神外封损让编号

printf("%d\n件叫担几早集升起皇针低",p->id);

free(p);

}

return相活乐福仅奏适各己0;

}

上一篇 台胞证是不是台湾居民来往大陆通行证
下一篇 手机排线坏了有什么症状?
扫一扫,手机访问

扫一扫,手机浏览