猴子选大王课程设计报告

合集下载

猴子选王问题求解和二叉树建立——课程设计报告

猴子选王问题求解和二叉树建立——课程设计报告

《数据结构》课程设计———————猴子选王问题求解和二叉树的建立专业计算机科学与技术班级指导教师编写日期 2012年6月24日目录一、课程设计的目的 (3)二、课程设计的要求 (3)三、相关知识 (3)四、问题的分析 (3)五、数据结构的描述 (4)六、算法的设计 (4)七、代码实现 (6)八、程序运行成功展示 (11)九、心得体会 (14)十、参考资料 (14)一、课程设计的目的课程设计是学生对课程所学知识的综合运用,它与课堂听讲、上机实验、课外练习、自学研究相辅相成,构成一个完整的课程教学体系。

《数据结构》是一门实践性强的课程,其中对算法设计和程序编写的掌握尤为重要。

学生虽然可以通过与课堂教学同步的上机实验完成相关内容的练习,但却往往局限于一些功能简单、彼此之间关系独立的算法和程序。

课程设计是一种综合训练,致力于培养学生全面、灵活的算法设计思想和较高的编程能力,为今后从事计算机开发与应用打下基础。

新世纪需要具有丰富科学知识、独立解决实际问题、有创造能力的新型人才,这也是该课程设计的最终目的。

二、课程设计的要求1、猴子选王问题描述一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。

2、二叉树的建立描述已知二叉树T中结点的前序和中序遍历序列,编写算法实现构造满足上述条件的二叉树。

3、界面设计模块问题描述设计一个菜单式界面,让用户可以选择要解决的问题,同时可以退出程序。

界面要求简洁明了,大方得体,便于用户的使用,同时,对于用户的错误选择可以进行有效的处理。

三、相关知识1、猴子选王求解约瑟夫环(Josephus)问题是由古罗马的史学家约瑟夫(Josephus)提出的,他参加并记录了公元66—70年犹太人反抗罗马的起义。

约瑟夫作为一个将军,设法守住了裘达伯特城达47天之久,在城市沦陷之后,他和40名死硬的将士在附近的一个洞穴中避难。

猴子选大王上机报告

猴子选大王上机报告

重庆交通大学信息科学与工程学院综合性设计性实验报告专业:课程名称:《C语言程序设计》题目:数组和链表的操作班级:设计者:学号:指导教师:完成时间:2014年6月16日重庆交通大学信息科学与工程学院综合性设计性实验任务书重庆交通大学信息学院综合性设计性实验评分表数组和链表的操作——猴子选大王程序设计报告一、系统的功能需求及分析功能:一群猴子共有m只,编号为1,2,……m,围坐一圈,从第1号猴子开始依次报数,数到n的猴子退出,然后从退出的下一只猴子继续从1开始报数,依次循环,直到圈内剩下一只猴子为止,该编号的猴子就是所选出的大王。

分析:用数组实现:先对数组进行初始化,然后将报到要删除的那个数字的猴子编号赋值为-1,每赋值一次,猴子数减一,再重新报数。

当猴子数只有一只的时候,输出猴子编号不为-1的那个编号。

用链表实现:先建立一个无头节点的单向循环的链表,然后将报到要删除的那个数字的猴子编号删除,以此循环,直到一个节点的下一个指向自己,最后输出猴子编号。

二、设计说明(一) 用数组实现1、数组的初始化for(i=0;i<m;i++)a[i]=i+1;2、算法流程图及说明(二) 用链表实现1、节点的定义struct monkey{int a;struct monkey *next;}*p,*q,*p1,*q1,*p2;2、链表的建立for (int i=0;i<m;i++){p=(struct monkey *)malloc(sizeof(struct monkey));p->a=i+1;p->next=NULL;if (i==0){head=p;q=head;}else{q->next=p;q=q->next;}}q->next=head;p2=head;p1=head;3、算法流程图及说明三、主要代码(一) 用数组实现#include<stdio.h>void main(){int a[10000];int m,n,x,b,i;printf("请输入猴子的只数:");scanf("%d",&m);printf("请输入要删除的猴子编号:");scanf("%d",&n);for(i=0;i<m;i++)a[i]=i+1;b=m;x=0;for(i=0;b!=1;i++){if(a[i%m+1]!=-1){x++;}if(x==n && a[i%m+1]!=-1){a[i%m+1]=-1;b--;x=0;}}for(i=1;i<=m;i++)if(a[i]!=-1)printf("猴子大王编号为:%d\n",i);}(二) 用链表实现#include <stdio.h>#include <stdlib.h>struct monkey{int a;struct monkey *next;}*p,*q,*p1,*q1,*p2;void main(){struct monkey *head;int m,n;printf("请输入猴子的只数:");scanf("%d",&m);printf("请输入想删除猴子的编号:");scanf("%d",&n);for (int i=0;i<m;i++){p=(struct monkey *)malloc(sizeof(struct monkey));p->a=i+1;p->next=NULL;if (i==0){head=p;q=head;}else{q->next=p;q=q->next;}}q->next=head;p2=head;p1=head;for (i=1;;i++){if (i==n-1){q1=p1->next;p1->next=q1->next;free(q1);i=0;}p1=p1->next;if (p1->next==p1) break;}printf("猴子大王的编号为%d\n",p1->a);}四、系统功能测试功能:一群猴子共有m只,编号为1,2,……m,围坐一圈,从第1号猴子开始依次报数,数到n的猴子退出,然后从退出的下一只猴子继续从1开始报数,依次循环,直到圈内剩下一只猴子为止,该编号的猴子就是所选出的大王。

猴子选大王

猴子选大王

一、猴子选大王课题描述一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1到m的顺序围坐一圈,从第1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。

猴子选大王系统设计1、猴子选大王总体设计结构图2、系统数据的数据结构设计猴子的存放采用链式存储结构,利用循环链表来实现建立的,其表示方法是递归定义的.(1)、变量说明程序中使用的存储结构:ListNode结构体Struct ListNode{Int data; //数据域Struct ListNode *nextPtr; //指向后继结点的指针域};Int monkeys,count //分别为猴子的个数和猴子的报数HeadPtr,tailPtr,currentPtr //分别为链表的头结点,尾结点和结点HeadPtr1,headPtr2 //分别为选大王的单循环链表和由淘汰的猴子所构成的链表(2)、函数说明DestroyList (LISTNODEPTR headPtr) //用destroylist函数来释放选大王链表的各个结点CreateList (int n) //创建循环链表,容纳n个猴子Printf(“input the amount of monkeys:”) //用printf函数来提示输入的内容Scanf(“%d”,&monkeys) //用scanf函数来输入猴子的个数Printf(“input the count number:”) //用printf函数来提示报数的数Scanf(“%d”,&count) //用scanf函数来输入每次数到的猴子就出局(3)、while循环说明while(currentPtr1!=currentPtr1->nextPtr){/*往后数一个猴子*/prePtr1=currentPtr1;currentPtr1=currentPtr1->nextPtr;count++;/*若数到n,则淘汰currentPtr指向的猴子*/if(count%n==0){/*从headPtr1指向链表中拆下currentPtr指向的结点*/prePtr1->nextPtr=currentPtr1->nextPtr;currentPtr1->nextPtr=NULL;/*将currentPtr1指向的结点插入到headPtr2指向链表中*/if(headPtr2==NULL){/*若headPtr2指向的为空链表*/headPtr2=currentPtr1;tailPtr2=currentPtr1;}else{ /*将拆下来的结点组装到headPtr2指向的链表上*/ tailPtr2->nextPtr=currentPtr1;tailPtr2=tailPtr2->nextPtr;}currentPtr1=prePtr1; /*currentPtr1指向上一个结点,为下一次数数做准备*/}}二、猴子选大王重点及关键技术分析程序通过循环链表较好的实现了猴子选大王的功能,但是还是有许多值得思考的地方。

猴子选大王课程设计说明书

猴子选大王课程设计说明书

数学与计算机学院课程设计说明书课程名称: 数据结构课程设计课程代码: 6014389题目: 猴子选大王年级/专业/班: 2010级软件工程2班学生姓名: 蒋童学号:开始时间: 2011 年11 月9 日完成时间: 2011 年12 月30 日课程设计成绩:指导教师签名:年月日数据结构课程设计任务书学院名称:数学与计算机学院课程代码:__ 6014389______ 专业:软件工程年级:2班一、设计题目猴子选大王二、主要内容一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。

三、具体要求及应提交的材料要求:使用数组和循环链表等两种以上的存储方式来做输入数据:输入m,n m,n 为整数,n<m输出形式:中文提示按照m个猴子,数n 个数的方法,输出为大王的猴子是几号,建立一个函数来实现此功能用C/C++语言编程实现上述内容,对每个问题写出一个算法实现,并按数学与计算机学院对课程设计说明书规范化要求,写出课程设计说明书,并提交下列材料:1)课程设计说明书打印稿一份2)课程设计说明书电子稿一份;3)源程序电子文档一份。

四、主要技术路线提示可采用数组、链表数据结构实现。

在此基础上用C/C++实现其操作。

五、进度安排按教学计划规定,数据结构课程设计为2周,其进度及时间大致分配如下:六、推荐参考资料[1] 严蔚敏,吴伟民.数据结构.清华大学出版社出版。

[2] 严蔚敏,吴伟民. 数据结构题集(C语言版) .清华大学出版社.2003年5月。

[3] 唐策善,李龙澎.数据结构(作C语言描述) .高等教育出版社.2001年9月[4] 朱战立.数据结构(C++语言描述)(第二版本).高等出版社出版.2004年4月[5] 胡学钢.数据结构(C语言版) .高等教育出版社.2004年8月[6] 徐孝凯等著.数据结构(C语言描述).清华大学出版社.2004指导教师签名日期年月日系主任审核日期年月日目录摘要................................. 错误!未定义书签。

猴子选大王

猴子选大王

《数据结构课程设计》报告专业: 计算机班级: 063学号: 14姓名: XXX指导老师: XXX时间: 2008.6.24-2008.7.4成绩:目录题目一编程实现将两个有序的线性进行合并,要求同样的数据元素只出现一次。

(3)题目二猴子选大王。

(6)题目三最少换车数。

(9)题目四航空订票系统。

(14)摘要(题目一):编程实现将两个有序的线性进行合并,要求同样的数据元素只出现一次。

(必做)解题思路由于两个线性表中的元素呈有序排列,在进行合并的时候,依次比较,哪个线性表的元素值小,就先将这个元素复制到新的线性表中,若两个元素相等,则复制一个即可,这样一直到其中的一个线性表结束,然后将剩余的线性表复制到新的线性表中即可。

1。

引言线性表是一个相当活的数据结构,它的长度可根据需要增长或缩短。

即对线性表不仅可以防问,还可以进行插入和删除以及合并2。

需求分析由于两个线性表中的元素呈有序排列,在进行合并的时候,依次比较,哪个线性表的元素值小,就先将这个元素复制到新的线性表中,若两个元素相等,则复制一个即可,这样一直到其中的一个线性表结束,然后将剩余的线性表复制到新的线性表中即可。

3.数据结构设计#include<stdio.h>为包含的库函数4.算法设计void Intilist(int la[10],int M)// 初始化线性表int move ( int a[100],int m) // 对该线性表排序int delem(int la[100],int m) //如果其中有相同的元素,则删除相同的元素5.算法的实现#include<stdio.h>void Intilist(int la[10],int M);int move (int la[100],int M);int delem(int la[100],int M);int M,N;5.2 初始化线性表void Intilist (int L[100],int m){int i;printf ("Please input numbers:\n");for (i=0;i<m;i++)scanf ("%d",&L[i]);printf ("\n");return;5.3 对该线性表排序int move ( int a[100],int m){int i,j,t;for (j=1;j<m;j++)for (i=0;i<m-j;i++)if (a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}m=delem(a,m);printf ("the sorted numbers:\n");for (i=0;i<m;i++)printf ("%d ",a[i]);printf ("\n");return m;}5.4如果其中有相同的元素,则删除相同的元素int delem(int la[100],int m){int i,j;for(i=0;i<m;i++)if(la[i]==la[i+1]){for(j=i;j<m;j++)la[j]=la[j+1];m--;i--;}return m;}5.5 主函数int main (){int la[100], lb[100];int lc[201];int i,j,k;printf("Please input length of la:\n");scanf("%d",&M);Intilist(la,M);M=move (la,M);printf("Please input length of lb:\n"); scanf("%d",&N);Intilist(lb,N);N=move(lb,N);i=j=0;k=0;while ((i<M)&&(j<N))if(la[i]<lb[j]){lc[k]=la[i];k++;i++;}else if (la[i]>lb[j]){lc[k]=lb[j];k++;j++;}else if(la[i]=lb[j]) {lc[k]=la[i];i++;k++;j++;}for(;j<N;j++){lc[k]=lb[j];k++;}for(;i<M;i++){lc[k]=la[i];k++;}for (i=0;i<k;i++)printf ("%d ",lc[i]);printf("\n");return 0;}6.程序运行的结果7.有关技术的讨论通过数组来模拟线性表的插入删除以及排序。

猴子选大王

猴子选大王

数据结构课程设计报告题目:猴子选大王院(系):计算机工程学院专业:计算机科学与技术班级:嵌入式109(1)学生:秦姚指导教师:寇海洲孙成富邱军林殷路2010年12月目录一、设计目的 (1)二、设计内容 (1)三、程序设计步骤 (1)四、调试分析 (5)五、测试结果 (5)六、课程设计小结: (6)一、设计目的1、能根据实际问题的具体情况,结合数据结构课程中的基本理论和基本算法,分析并正确确定数据的逻辑结构,合理地选择相应的存储结构,并能设计出解决问题的有效算法。

2、提高程序设计和调试能力。

学生通过上机实习,验证自己设计的算法的正确性。

学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。

3、初步掌握软件开发过程中问题分析、系统设计、程序编码、测试等基本方法和技能。

4、训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。

5、培养根据选题需要选择学习书籍,查阅文献资料的自学能力。

二、设计内容1、系统名称:猴子选大王按照规定的要求,选出最后的一只猴子,为大王。

2、要求:一堆有编号的猴子,编号为1,2,3……m,这群猴子(m个)按照1-m的顺序围坐一圈,从第一开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中剩下最后一只猴子,则该猴子为大王。

三、程序设计步骤1)功能分析说明图:2)采用主要的数据结构类型。

采用了链表的存储方式,属于链接存储结构。

for(i=1;i<n;i++) //建立链表的存储结构{p=(LINK)malloc(sizeof(Monkey));p2->next=p;p2=p;}以下是用于存储结点的结构体的定义:typedef struct monkey{int num;struct monkey *next;} Monkey,*LINK;基本算法:这个算法的主要流程为:从控制台读取猴子的数量和报数的最大数——>对猴子进行编号,并用链表来存储——>让链表中的猴子进行报数,对于报数为m的猴子则从链表中删除——>当链表中只剩下一个报数后则停止这个过程,这最后一个猴子即选出来的大王。

猴子选大王课程设计报告

猴子选大王课程设计报告
由于时间有限,本人水平有限,报告中可能存在诸多不完善之处,还望见谅。
四、参考文献
1.H M Peitel,P J Deitei.C How to progrom,second Edition.蒋才鹏等译,C程序设计教程,北京:机械工业出版社,2000
2.Herbert Schild著,王曦若,李沛译,ANSIC标准详解,北京:学院出版社,1994
3、程序的设计思想:
(1)问题分析:“猴子选大王”问题是约瑟夫环问题的一个特例。由于本题目的数据元素个数不可知,所以可使用链表来动态的分配内存空间。而该问题又是一个不断的循环问题所以用循环链表来实现。
(2)总体设计:首先生成一个空链表,并给n个结点分配空间,让单链表的表尾指针指向头结点则生成一个带有n个结点的循环单链表。给每只猴子建立顺序的编号。机型筛选,最后剩下1个猴子时停止运行,得到的结点即为猴子选出大王的编号。
7号猴子报:2
8号猴子报:3 8号猴被淘汰
4号猴子报:1
7号猴子报:2
4号猴子报:3 4号猴被淘汰
7号猴子报:1
胜出:7号猴子Press any key to continue
程序初始状态如下图:
下一组数据:m = 21,n = 2;
运行结果如下:
得到了预期结果
6:程序源代码
#include<stdio.h>
北京化工大学北方学院
课程设计报告
课程名称数据结构课程设计
设计题目猴子选大王
专业、班级软件工程0902班
学号090203
姓名
指导教师周建敏
设计时间2012年9月17日—2012年10月14日
2012年10月10日
一、引言(简要说明设计题目的目的、意义、内容、主要任务等)

03 实验报告范例

03 实验报告范例

“猴子选大王”实验报告游戏截图图一:开始游戏图二:猴子队列就绪图三:游戏中,按空格键淘汰猴子图四:选出大王,即最后剩下的一只图五:重新开始一局功能描述本游戏源自典故猴子称大王!1、游戏运行,初试界面出现‘空格开始’的提示。

2、玩家按空格开始游戏,6只猴子排成一列。

3、游戏开始后,用户每按一次空格键,随机从猴子队列中产生一个被淘汰的猴子4、被淘汰的猴子会出局,加入屏幕下方的淘汰者猴子队列中。

5、站在被淘汰猴子后方的选手依次往前移,填补空白6、用户继续按空格淘汰猴子,值到剩下唯一的猴子,就是大王!这样,一局游戏完成。

7、一局游戏完成后,屏幕重新出现“空格开始”的标志,用户按空格可以继续游戏,如此往复。

流程图数据结构1.CSprite* m_Monkeys[6] 用一个CSprite的指针数组来保存猴子精灵2.float m_fLocation[6]; 用一个浮点型数组存储猴子位置(因为6只猴子站成一排,y坐标值是相同的,因此该数组保存6只猴子的x坐标值)。

其中m_Monkeys[i] 对应的位置为 m_fLocation[i]3.m_iNumMokeys 当前备选猴子数量,即截图中上层队列的猴子数4.m_iNumLoseMonkeys 淘汰的猴子数量,即下层队列中的猴子数5.m_iChooseMonkey 本轮淘汰的猴子编号6.m_iMoveMonkey 淘汰猴子后,后面需要移动的猴子数7.m_fDelayTime 猴子向前移动的延迟时间算法描述有六只猴子,存储在m_Monkeys数组中,对应的位置则在m_fLocation中,对应关系为m_Monkeys[i] →m_fLocation[i];游戏状态m_iGameState分为三种状态0,1,2 ,其中0表示游戏结束状态,1表示游戏初始化,2则表示游戏运行状态;0 → 1的转换为“空格开始”,初始化函数为GameInit函数;1 → 2的转换自然发生,即游戏初始化函数后会自动将游戏状态从1置为22 表示游戏运行状态,在该状态,敲击空格可以选出淘汰的猴子2 → 0的转换为当猴子的备选队列中只剩下一只猴子的时候发生,该猴子便是大王了CGameMain::CGameMain()构造函数完成初始化工作1、设置游戏状态为1。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计报告课程设计题目:猴子选大王****:**专业:软件工程班级:1321813学号:****************:***2015年1 月9 日东华理工大学目录一:需求分析1.问题描述2.基本要求3.需求分析二:概念设计三:详细设计四:调试分析和测试结果五:总结六:源代码一:需求分析1.问题描述一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1-m 的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。

2.基本要求输入数据:输入m,n m,n 为整数,n<m。

输出形式:中文提示按照m个猴子,数n 个数的方法,输出为大王的猴子是几号,建立一个函数来实现此功能。

3.需求分析1.输入数据m,n。

2.计算出最终猴子大王的序号。

3.模拟出整个过程4.找到合适的数据结构处理这个问题。

5.找到正确的方法解决这个问题。

二:概念设计这个问题属于约瑟夫环问题,根据问题描述得知,该问题中m个猴子围坐在一群形成首尾相接的环,因此可用循环链表解决。

从第n个猴子开始出列相当于从链表中删除一个节点。

该程序主要有三个模块组成,建立循环链表,报数利用循环链表实现猴子的出列,最终剩下的猴子即猴王。

具体步骤如下:第一步首先创建循环链表。

第二步向链表中填入猴子的编号。

第三步找第一个开始报数的猴子。

第四步数到n让这个猴子出列。

第五步接着开始报数,重复第四步,直到剩下最后一个猴子,就是大王。

是三:详细设计1.程序中使用的存储结构struct L{int num;struct L *next;};int n;int i=0;2.程序中使用的循环结构struct L *LisDelete(struct L *head,int m)//报数为m的退出.{struct L *p,*q;int j=0;p=head;i=i+1;if(p->next==head) return(p);while(j<m-2){p=p->next;j=j+1;}q=p->next;p->next=q->next;head=p->next;printf("%d 第%d个猴子离开.\n",i,q->num);free(q);LisDelete(head,m);}3.主函数void main(){struct L *head;struct L *p;int m,N;printf("********************************************************* \n");printf("猴子选大王:\n");printf(" 一堆猴子都有编号,编号1,2,3...m,这群猴子(m个)按照1-m\n");printf("的顺序围坐一圈,从第1开始数,每数到第n(n<m)个,该猴子就要\n");printf("离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该\n");printf("猴子为大王\n");printf("********************************************************* \n");printf(" 输入n(所有猴子的总数):");scanf("%d",&N);printf(" 输入m(离开的猴子所报的数):");scanf("%d",&m);printf("***********************************\n");if (m>N||m<=0||N<=0){ERROR();}else{if(m==1){printf("结果:第%d个猴子为大王.\n",N);}else{head=creat(N);printf(" 过程:\n");p=LisDelete(head,m);printf("***********************************\n");printf("结果:第%d个猴子为大王.\n",p->num);printf("***********************************\n");}}}四:调试分析和测试结果得到了预期的结果五:总结本次课程设计,参考了相关教科书和参考书对二分法查找与各种排序方法的描述,对相关功能所需结构体和函数有了初步构思之后,经过代码的输入、语法改错,调试执行等过程,完成了一个简单的功能系统。

通过一周时间,从初步思路形成到基本功能完成,对数据结构设计实践与应用部分基本了解了。

从本次课程设计我觉得我应该把所学基础知识与具体问题实践结合,基本知识要扎实,对待问题要各方面分析。

数据结构与算法设计是一种锻炼人清晰思路的科目,我们应该通过多次实践让自己的知识得到巩固。

六:源代码#include <stdio.h>#include <malloc.h>#define NULL 0#define LEN sizeof(struct L)struct L{int num;struct L *next;};int n;int i=0;struct L *creat(int N)//建立动态循环链表.{printf("将猴子顺序编号为:\n");struct L *head;struct L *p1,*p2;n=0;p1=p2=(struct L *)malloc(LEN);p1->num=1;printf("%d ",p1->num);head=NULL;while(p1->num<=N){n=n+1;if(n==1) head=p1;else p2->next=p1;p2=p1;p1=(struct L *)malloc(LEN);p1->num=n+1;if(p1->num<=N)printf("%d ",p1->num);}p2->next=head;//尾指针指向头指针.printf("\n");printf("***********************************\n");printf("\n");return(head);}struct L *LisDelete(struct L *head,int m)//报数为m的退出.{struct L *p,*q;int j=0;p=head;i=i+1;if(p->next==head) return(p);while(j<m-2){p=p->next;j=j+1;}q=p->next;p->next=q->next;head=p->next;printf("%d 第%d个猴子离开.\n",i,q->num);free(q);LisDelete(head,m);}ERROR(){printf("m>N或者m<=0或者N<=0 ERROR!\n");}void main(){struct L *head;struct L *p;int m,N;printf("********************************************************* \n");printf("猴子选大王:\n");printf(" 一堆猴子都有编号,编号1,2,3...m,这群猴子(m个)按照1-m\n");printf("的顺序围坐一圈,从第1开始数,每数到第n(n<m)个,该猴子就要\n");printf("离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该\n");printf("猴子为大王\n");printf("********************************************************* \n");printf(" 输入n(所有猴子的总数):");scanf("%d",&N);printf(" 输入m(离开的猴子所报的数):");scanf("%d",&m);printf("***********************************\n");if (m>N||m<=0||N<=0){ERROR();}else{if(m==1){printf("结果:第%d个猴子为大王.\n",N);}else{head=creat(N);printf(" 过程:\n");p=LisDelete(head,m);printf("***********************************\n");printf("结果:第%d个猴子为大王.\n",p->num);printf("***********************************\n");}}}。

相关文档
最新文档