欢迎来到天天文库
浏览记录
ID:13028241
大小:34.50 KB
页数:3页
时间:2018-07-20
《约瑟夫环(严蔚敏答案)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、约瑟夫游戏的大意是:每30个旅客同乘一条船,因为严重超载,加上风高浪大,危险万分;因此船长告诉乘客,只有将全船一半的旅客投入海中,其余人才能幸免遇难。无奈,大家只得同意这种办法,并议定30个人围成一圈,由第一个人数起,依次报数,数到第9人,便把他投入大海中,然后再从他的下一个人数起,数到第9人,再将他扔进大海中,如此循环地进行,直到剩下15个乘客为止。问哪些位置是将被扔下大海的位置。直到所有人全部出列。#include#include#defineOK1#defineERROR0typedefintStatus;typ
2、edefstruct{intnum;//结点编号intpassword;//结点密码}ElemType;typedefstructLNode{ElemTypedata;structLNode*next;}LNode,*LinkList;intm,n;StatusInitList_L(LinkList&L){//建立一个空的单循环链表,L为带头结点的单循环链表的头指针.__L=(LinkList)malloc(sizeof(LNode));___//生成新结点if(!L)returnERROR;___L->next=L___//生成循环链表returnOK;
3、}//InitList_LStatusListInsert_L(LinkList&L,inti,ElemTypee){//在带头结点的单循环链表L中第i个位置之后插入元素eLinkListp,s;intj;p=L;j=0;while(p->next!=L&&jnext;++j;}if(j4、5、j>i-1)returnERROR;//i小于1或者大于表长s=(LinkList)malloc(sizeof(LNode));//生成新结点___s->data=e;___//新结点输入信息___s->next=p-6、>next;___//将新结点插入___p->next=s;__//将新结点插入returnOK;}//ListInsert_LvoidJoseph(LinkList&L){LinkListp,q;inti;m=m%n;//若m>n时q=L;p=L->next;while(___L->next!=L__)//只要还有结点{i=1;while(inext;___//p往后寻找if(p!=L)i++;}q->next=p->next;//第m个结点脱链___printf("%3d"7、,p->data.num);___//输出第m个结点信息m=____p->data.password;___;//将第m个人的密码作为新的m值_____free(p);_____//删除第m个结点p=q->next;if(p==L){q=p;p=p->next;}}free(L);}intmain(){LinkListL,p;inti;int*a;ElemTypee;scanf("%d",&n);//参加n个人scanf("%d",&m);//初始第m个人出列a=(int*)malloc(n*sizeof(int));for(i=0;i8、nf("%d",a+i);//读入n个人的密码InitList_L(L);for(i=1;i<=n;i++)////创建循环链表,表示n个人围成一圈的约瑟夫环{e.num=____i____;e.password=____*(a+i-1)___;____ListInsert_L(L,i,e);___;}Joseph(L);return0;}
4、
5、j>i-1)returnERROR;//i小于1或者大于表长s=(LinkList)malloc(sizeof(LNode));//生成新结点___s->data=e;___//新结点输入信息___s->next=p-
6、>next;___//将新结点插入___p->next=s;__//将新结点插入returnOK;}//ListInsert_LvoidJoseph(LinkList&L){LinkListp,q;inti;m=m%n;//若m>n时q=L;p=L->next;while(___L->next!=L__)//只要还有结点{i=1;while(inext;___//p往后寻找if(p!=L)i++;}q->next=p->next;//第m个结点脱链___printf("%3d"
7、,p->data.num);___//输出第m个结点信息m=____p->data.password;___;//将第m个人的密码作为新的m值_____free(p);_____//删除第m个结点p=q->next;if(p==L){q=p;p=p->next;}}free(L);}intmain(){LinkListL,p;inti;int*a;ElemTypee;scanf("%d",&n);//参加n个人scanf("%d",&m);//初始第m个人出列a=(int*)malloc(n*sizeof(int));for(i=0;i8、nf("%d",a+i);//读入n个人的密码InitList_L(L);for(i=1;i<=n;i++)////创建循环链表,表示n个人围成一圈的约瑟夫环{e.num=____i____;e.password=____*(a+i-1)___;____ListInsert_L(L,i,e);___;}Joseph(L);return0;}
8、nf("%d",a+i);//读入n个人的密码InitList_L(L);for(i=1;i<=n;i++)////创建循环链表,表示n个人围成一圈的约瑟夫环{e.num=____i____;e.password=____*(a+i-1)___;____ListInsert_L(L,i,e);___;}Joseph(L);return0;}
此文档下载收益归作者所有