约涩夫问题多种解法_第1页
约涩夫问题多种解法_第2页
约涩夫问题多种解法_第3页
约涩夫问题多种解法_第4页
约涩夫问题多种解法_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、代码1:#include using namespace std;typedef struct Nodeint data;struct Node * next;Lnode,*LinkList;LinkList Creat(int num)LinkList L;Lnode *s,*r,*head;int i=1;L=r=NULL;while(1)s=new Lnode;s-data=i;i+;if(L=NULL) L=s;head=L;elser-next=s;r=s;if(i=num+1)break;r-next=head;return L;int out(LinkList L,int num

2、,int step)Lnode *p,*s,*n;p=L;for(int i=1;i=num;i+)int count=1;/用count定位到第m个人,循环后,p1指向这个人,p2指向这个人的上一个人while(count+next;coutdatanext=p-next;/把当前的人前的人和当前的人后的人连上.p=p-next;/下次从当前的人的下一个人开始数delete n;/把这个人删除(就是释放这块内存)/*int i=0;while(1)for(int j=0;jnext;s=p;p=p-next;s=p-next;coutdatanext; p=s; p=p-next; s-ne

3、xt=p-next; coutdata; delete p;int main()LinkList L;int num,step;cinnumstep;L=Creat(num);out(L,num,step);/get(L,step);return 0; 代码2:(很好)# include # include struct stu int num; struct stu *next;int m,n;struct stu *p,*q,*s;struct stu *create() struct stu *head,*s1,*r; int i; head=NULL; for(i=1;inum =i;

4、 if(head=NULL)head=s1; else r-next =s1; r=s1; if(r) r-next =head; return head;struct stu * get_index(struct stu *head,int k) int j=1; if (k1) printf (输入错误n); return NULL; s=head; while (s & jnext ;j+; return s;void f1 (struct stu *head,struct stu *h) int x,i; x=m/2; p=h; i=1;printf (依次出列的人的编号为:); wh

5、ile (p-next!=p) q=p-next; for (i=1;inext;q=p-next; p-next =q-next ; printf (%d ,q-num); free(q); p=p-next ; printf (最后剩下的人的编号为%dn,p-num );void f2 (struct stu *head,struct stu *h) int i,x; x=m/2; i=1; p=h; printf (依次出列的人的编号为:); do for (i=1;inext ;p=q-next ; q-next =p-next ; printf (%d ,p-num); free(p

6、); p=q-next ; while (q-next!=q); printf (n最后剩下的人的编号为%dn,q-num);void main () int k; struct stu *head,*h; printf (请输入总人数:); scanf (%d,&n); printf (请输入退出圈子的人的编号:); scanf(%d,&m); printf (请输入开始报数的人的编号:); scanf (%d,&k); head=create (); h=get_index(head,k); if (m%2=0) f1(head,h); else f2(head,h); 200分求高手周五

7、前写出约瑟夫环实验报告,很急,谢谢 悬赏分:200 - 解决时间:2009-4-4 04:04 问题描述 约瑟夫问题的一种描述是:编号为1,2,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序。基本要求 利用单向循环链表存储结构模拟此过程,按照出列的顺序印出各人的编号。实现提示 程序运行后,首先要求用户指定初始报数上限值,然后读取各人的密码。

8、可设n30。此题所用的循环链表中不需要“头结点”,请注意空表和非空表的界限。实验报告格式一、 需求分析(一定要写)二、 概要设计(详细写)三、 详细设计(即程序代码,一定要有注释)四、 调试分析(很重要)大概内容:程序一次写下来肯定会有各种错误. 通过你自己调试,找出错误,知道正常编译运行. 这个过程就是你怎么调怎么写嘛. 比如编译报了什么错,然后你是怎么改正的,如何提高运行效率.写出程序调试过程中的感想,等等五、 测试结果(几组数据,常规数据和边缘数据)源程序请用C语言写,然后报告写成word的格式,发到aaaazzzzpo,请各位大哥不要再只给我源程序了(源程序最好不要有warning错误

9、),拜托了,很急的,谢谢,还有,求管理员别再删了,我都付出920分了,谢谢啊。 提问者: aaaazzzzpo - 六级最佳答案数据结构实验报告:编制一个Joseph约瑟夫环示例程序一、 需求分析1. 输入的形式和输入值的范围 本程序中,输入报数上限值m和人数上限l,密码,均限定为正整数,输入的形式为一个以“回车符”为结束标志的正整数。2. 输出的形式 从屏幕显示出列顺序。3. 程序功能 提供用户从键盘输入,Joseph约瑟夫环的必要数据,并显示出列顺序。4. 测试数据(1)输入2073 1 7 2 4 8 4输出6 1 4 7 2 3 5二、 概要设计以单向循环链表实现该结构。1. 抽象数据

10、类型的定义为:ADT LNode 数据对象:D=ai | aiCharSet,i= 1,2,n,n0 数据关系:R1= | ai D, I=2,n基本操作: InitList(&L) 操作结果:构造一个最大长度ms内容为空的有序表L。 ClearList(&L) 初始条件:线性表L已经存在。 操作结果:将L重置为空表。 EmptyList(L) 初始条件:线性表L已经存在。 操作结果:若L为空表返回TRUE,否则返回FALSE。 ListLength(L) 初始条件:线性表L已经存在。 操作结果:返回L中数据元素个数。 GetElem(L, pos, &e) 初始条件:线性表L已经存在,1iL

11、istLength(L)。 操作结果:用e返回L中第i个数据元素的值。 LocateElem(L, e) 初始条件:线性表L已经存在。 操作结果:返回L中第1个与e相同的元素的位序。若不存在返回0。 ListInsert (L, i, e) 初始条件:线性表L已经存在。 操作结果:在L中的第i个元素的位置之前插入新元素 e,L的长度加1。ListDelete(L, pos, e) 初始条件:线性表L已经存在,1iListLength(L)。 操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1。 ListTraverse(L) 初始条件:线性表L已经存在。 操作结果:依次对L的每个数

12、据元素进行访问。ADT SqList本程序包含以下模块:(1)主程序模块:void main() 初始化; 输入数据; 执行功能;显示结果;(2)各功能模块实现顺序表的各项功能。各模块的调用关系:主程序 各功能模块三、 详细设计#include #include #include #define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;typedef int ElemType;/*定义类型*/typedef struct

13、LNode ElemType data; struct LNode * next;LNode, *LinkList;/*1初始化,置表头指针为空*/void InitList(LinkList & HL) HL = (LinkList) malloc(sizeof(LNode); HL-next = HL;/*3返回长度,空则返回0*/int ListLength(LinkList HL) int i=0; LinkList p; p = HL-next; while(p != HL) i+; p = p-next; return i;/*5返回指定位置元素的值,超出则停止运行*/ElemTy

14、pe GetElem(LinkList HL,int pos)略/*6遍历所有元素*/void TraverseList(LinkList HL) LinkList p; p = HL-next; if(p = HL) printf(空拉!n); exit(1); while(p != HL) printf(%-5d, p-data); p = p-next; printf(n);/*8修改某位置的元素值,成功返回1,否则返回0*/int UpdatePosList(LinkList HL,int pos,ElemType x)略/*10插入元素到表尾*/void InsertLastList

15、(LinkList* HL,ElemType x)略/*主函数*/void main() int a30;/ = 3, 1, 7, 2, 4, 8, 4; int m, n, l; LinkList p; InitList(p); do printf(Input upper limit number (m): ); scanf(%d, &m); getchar(); printf(Input upper limit people (n): ); scanf(%d, &l); getchar(); while(m = 0 | l = 0); printf(Input peoples passwo

16、rd: ); for(int i = 0; i 0; n-) if(m != n & m % n != 0) c = m % n; else if(m = n) c = n; else if(m % n = 0) c = 1; while(c 0) if(s + 1 = l) s = l; else s = (+s) % l; if(GetElem(p, s) != -1) c-; printf(%-5d, s); m = GetElem(p, s); UpdatePosList(p, s, -1); printf(n*End*n);四、 调试分析程序的编写和调试基本正常。遇到的问题主要是:指

17、针的指向的边界问题。本实验采用数据抽象的与模块化程序设计方法。思路清晰,实现时调试顺利,各模块具有很好的可重用性,得到了一次良好的程序设计训练。五、 用户使用说明如何使用,详细步骤根据提示输入学生人数和学生信息示例:Input upper limit number (m): 20Input upper limit people (n): 7Input peoples password: 3 1 7 2 4 8 4六、 测试结果测试结果,输入输出。完整严格。输入字母与负数 如:a,-1提示继续输入正确的值:Input upper limit number (m):输入正确的值得:Input up

18、per limit number (m): 20Input upper limit people (n): 7Input peoples password: 3 1 7 2 4 8 4*Order*6 1 4 7 2 3 5*End*Input upper limit number (m): 5Input upper limit people (n): 5Input peoples password: 1 2 3 4 5*Order*5 1 2 4 3*End* #include Stdio.h#include Conio.h#includemalloc.htypedef struct nod

19、e int num; int m; struct node *link; node; int c; void JOSEPH(int n,int c) node *p,*r,*list; int i; for (i=1;inum=i; printf(nplease input the passwarld:); scanf (%d,&(p-m) ; if (i=1) list=p ; else r-link=p; r=p; p-link=list; p=list; while(p-link!=p) for (i=1;ilink; printf (%dn,p-num); c=p-m; r-link=

20、p-link; free(p); p=r-link; printf(%d,p-num); int main(void) int n; printf(please input the frist passwarld:) ; scanf(%d,&c); printf(please input the number of n:); scanf (%d,&n); JOSEPH( n, c) ; getch(); #includetypedef struct ajose int num; int code; struct ajose *next;joseph;joseph *creat(void) jo

21、seph *head,*p1,*p2; int i=0,code; head=(joseph *)malloc(sizeof(joseph); p2=p1=(joseph *)malloc(sizeof(joseph); head-next=NULL; printf(nplease input 1s code(end with 0):n); scanf(%d,&code); while(code) i+; p1=(joseph *)malloc(sizeof(joseph); p1-num=i; p1-code=code; if(i=1) head-next=p1; else p2-next=p1; p2=p1; printf(please input 1s code(end with 0):n); scanf(%d,&code); p2-next=head-next; head-num=i; printf(ncreat success!n); return head; void game(joseph *head,int m) joseph *p1,*p2; int i=1; p2=head; p1=head-next; w

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论