猴子选大王课程教学设计报告

合集下载

用c++编写程序猴子选大王

用c++编写程序猴子选大王

用C++编写程序猴子选大王(总7页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--湖南人文科技学院计算机系课程设计说明书课程名称: 数据结构课程代码:题目: 猴子选大王年级/专业/班: 06级计算机科学与技术专业一班学生姓名:学号:06408109 06408102 06408107 06408122 06408103指导教师: 刘刚常开题时间: 2008 年 6 月 16 日完成时间: 2008 年 6 月 29 日目录摘要..................................................................................................................... 错误!未定义书签。

一、引言............................................................................................................. 错误!未定义书签。

二、设计目的与任务......................................................................................... 错误!未定义书签。

三、设计方案....................................................................................................... 错误!未定义书签。

1、总体设计......................................................................................................... 错误!未定义书签。

猴子选大王上机报告

猴子选大王上机报告

重庆交通大学信息科学与工程学院综合性设计性实验报告专业:课程名称:《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.有关技术的讨论通过数组来模拟线性表的插入删除以及排序。

猴王出世教学设计及设计意图8篇

猴王出世教学设计及设计意图8篇

猴王出世教学设计及设计意图8篇(最新版)编制人:__________________审核人:__________________审批人:__________________编制单位:__________________编制时间:____年____月____日序言下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。

文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!并且,本店铺为大家提供各种类型的经典范文,如工作总结、报告大全、演讲致辞、条据书信、心得体会、党团资料、读后感、作文大全、教学资料、其他范文等等,想了解不同范文格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor.I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!In addition, this shop provides you with various types of classic sample essays, such as work summary, report encyclopedia, speeches, articles and letters, experience and experience, party and group information, after reading, composition encyclopedia, teaching materials, other sample essays, etc. I want to know the difference Please pay attention to the format and writing of the sample essay!猴王出世教学设计及设计意图8篇教学设计在起草的过程中,大家都清楚有哪些务必要注意的事项吗,需要重视逻辑严谨。

猴子选大王课程设计报告

猴子选大王课程设计报告
由于时间有限,本人水平有限,报告中可能存在诸多不完善之处,还望见谅。
四、参考文献
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日
一、引言(简要说明设计题目的目的、意义、内容、主要任务等)

大班主题神通广大的美猴王教案

大班主题神通广大的美猴王教案

大班主题神通广大的美猴王教案大班主题神通广大的美猴王教案大班主题神通广大的美猴王教案1环境创设1.将幼儿喜爱的《西游记》人物形象悬挂于教室中。

2.将幼儿“我喜欢的《西游记》故事”“我喜欢的《西游记》人物”的绘画作品布置成主题墙。

3.在活动时布置西游记中几种不同的场景。

4.将《西游记》人物图片张贴在美工区,为幼儿塑造形象提供帮助。

生活活动1.在一日生活中的过渡环节等时间播放《西游记》动画片及歌曲,引导幼儿充分感受。

2.在餐点环节中指导幼儿细嚼慢咽,了解细嚼慢咽对身体的好处。

家园共育1.请家长帮助幼儿搜集《西游记》的图书及动画片,与幼儿共同欣赏。

2.请家长在家长欣赏幼儿演唱歌曲《捏泥人》《猪八戒吃西瓜》等,并给予肯定和鼓励。

3.家长知道幼儿在家中练习使用筷子。

教学活动1.次主题一:开展活动:“孙悟空大闹天宫”“捏面人”“师徒四人行”“猪八戒吃西瓜”“悟空分桃”等集体教学活动,让幼儿初步了解孙悟空的性格特征,并对西游记中其他人物产生浓厚的兴趣,熟练演唱歌曲,用彩泥制作师徒四人的形象,较准确地表现其典型特征。

2.次主题二:开展活动:“真假美猴王”“猪八戒背媳妇”“美猴王小剧场”“奇妙的影子”“我们的演出海报”等集体教学活动,让幼儿理解真假美猴王的故事情节,根据乐曲的情绪特点及乐曲结构的变化进行创编动作,了解海报的`艺术特点。

3.次主题三:开展活动:“小猴请客”“三大白骨精”“好玩的金箍棒”“新编美猴王故事会”“《西游记》连环画”“宝物大比拼”等集体活动,让幼儿学习5的组成及加减运算,尝试和同伴合作为动画片配背景音乐,了解连环画的特点,能独立创编并清楚的讲述故事,感受现代化高科技为人们生活带来的便捷。

区域活动美工区:1.“七十二变美猴王”:学创造性地表现美猴王的典型外貌特征,以及不同的动作造型。

2.“小猴吃桃”:掌握画小猴的基本方法,体验一边念儿歌,一边作画的快乐。

3.“制作面具”:掌握用剪刀抠出面具的眼睛、鼻子、嘴巴等镂空部分的技能。

猴子选大王课程设计

猴子选大王课程设计

猴子选大王课程设计一、课程目标知识目标:1. 学生能够理解故事《猴子选大王》的主要情节,掌握故事中出现的生词和关键句型。

2. 学生能够运用一般现在时和一般过去时描述故事中猴子的行为和动作。

3. 学生了解并掌握故事中所传达的公平、公正和团队合作的重要性。

技能目标:1. 学生能够通过听力训练,提高对英语语音、语调的辨识能力。

2. 学生能够通过角色扮演,锻炼口语表达和沟通能力。

3. 学生能够运用创意思维,编写属于自己的猴子选大王故事。

情感态度价值观目标:1. 学生通过学习故事,培养公平竞争、尊重他人的价值观。

2. 学生在小组合作中,学会倾听、关心和帮助同伴,培养团队协作精神。

3. 学生在课堂活动中,树立自信、勇敢表达自己观点的态度。

分析课程性质、学生特点和教学要求,本课程将目标分解为以下具体学习成果:1. 学生能够复述故事《猴子选大王》的主要情节,正确使用故事中的生词和关键句型进行描述。

2. 学生能够在角色扮演活动中,运用一般现在时和一般过去时表达猴子的行为和动作。

3. 学生能够通过小组合作,编写并表演一个关于猴子选大王的故事,展现公平、公正和团队合作的重要性。

4. 学生在课程学习中,积极参与课堂活动,展示良好的倾听、沟通和协作能力,体现出自信、尊重和关心他人的态度。

二、教学内容本节课以《猴子选大王》故事为主线,结合英语课程标准和学生实际情况,组织以下教学内容:1. 故事导入:通过图片、视频等教学资源,引导学生了解故事背景,激发学生的学习兴趣。

2. 故事学习:详细讲解故事《猴子选大王》的情节,重点讲解生词、关键句型和语法知识点。

- 生词:选举、候选、公平、公正、竞争、团队等。

- 句型:一般现在时、一般过去时的陈述句、疑问句和否定句。

- 语法:比较级、最高级的运用。

3. 角色扮演:学生分组进行角色扮演,运用所学知识进行对话练习,锻炼口语表达能力。

4. 小组合作:以小组为单位,编写一个关于猴子选大王的故事,要求运用所学生词、句型和语法。

猴子选大王问题

猴子选大王问题

猴子选大王问题集团文件版本号:(M928-T898-M248-WU2669-I2896-DQ586-M1988)这是17世纪的法国数学家加斯帕在《数目的游戏问题》中讲的一个故事:15个教徒和15个非教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了一个办法:30个人围成一圆圈,从第一个人开始依次报数,每数到第九个人就将他扔入大海,如此循环进行直到仅余15个人为止。

问怎样排法,才能使每次投入大海的都是非教徒。

*问题分析与算法设计约瑟夫问题并不难,但求解的方法很多;题目的变化形式也很多。

这里给出一种实现方法。

题目中30个人围成一圈,因而启发我们用一个循环的链来表示。

可以使用结构数组来构成一个循环链。

结构中有两个成员,其一为指向下一个人的指针,以构成环形的链;其二为该人是否被扔下海的标记,为1表示还在船上。

从第一个人开始对还未扔下海的人进行计数,每数到9时,将结构中的标记改为0,表示该人已被扔下海了。

这样循环计数直到有15个人被扔下海为止。

[编辑本段]约瑟夫问题的一般形式:约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。

例如N=6,M=5,被杀掉的人的序号为5,4,6,2,3。

最后剩下1号。

假定在圈子里前K个为好人,后K个为坏人,你的任务是确定这样的最少M,使得所有的坏人在第一个好人之前被杀掉。

C++代码示例:#include<iostream>usingnamespacestd;voidmain(){intn,m,a[101],k,i,j,num;//计数器是从1开始的,所以100个人用101cout<<"请输入参加游戏的玩家人数(不超过100人):";cin>>n;cout<<"----------------------------------------"<<endl;if(n>100){cout<<"玩家太多,请重新登陆此程序!"<<endl;return;}cout<<"输入游戏中要玩的数字:";cin>>m;cout<<"----------------------------------------"<<endl;for(i=1;i<=n;i++){a【i】=1;//注意百度百科里不让使用ASCII里的方括号,这里是中文字符集里的方括号,}j=0;k=0;for(i=1;i<=n+1;i++){if(a【i】==1){j=j+a【i】;if(j==m){j=0;a【i】=0;k++;}if(k==n){num=i;break;}}if(i==n+1)i=0;}cout<<"最后获胜的玩家是第"<<num<<"号玩家!"<<endl;cout<<"----------------------------------------"<<endl; }写完密码约瑟夫就想到原来看到约瑟夫问题的一个数学解法很巧妙很简单不过只能推出最后一个出列的人无论是用链表实现还是用数组实现都有一个共同点:要模拟整个游戏过程,不仅程序写起来比较烦,而且时间复杂度高达O(nm),当n,m非常大(例如上百万,上千万)的时候,几乎是没有办法在短时间内出结果的。

数据结构课程设计(附代码)-数据结构设计

数据结构课程设计(附代码)-数据结构设计

上海应用技术学院课程设计报告课程名称《数据结构课程设计》设计题目猴子选大王;建立二叉树;各种排序;有序表的合并;成绩管理系统;院系计算机科学与信息工程专业计算机科学与技术班级姓名学号指导教师日期一.目的与要求1. 巩固和加深对常见数据结构的理解和掌握2. 掌握基于数据结构进行算法设计的基本方法3. 掌握用高级语言实现算法的基本技能4. 掌握书写程序设计说明文档的能力5. 提高运用数据结构知识及高级语言解决非数值实际问题的能力表。

3、输出功能:void print(LinkList *head);通过一个while的循环控制语句,在指针p!=NULL时,完成全部学生记录的显示。

知道不满足循环语句,程序再次回到菜单选择功能界面。

4、删除功能:LinkList *Delete(LinkList *head);按想要删除的学生的学号首先进行查找,通过指针所指向结点的下移来完成,如果找到该记录,则完成前后结点的连接,同时对以查找到的结点进行空间的释放,最后完成对某个学生记录进行删除,并重新存储。

5、插入功能:LinkList *Insert(LinkList *head);输入你想插入的位置,通过指针所指向结点的下移,找到该位置,将该新的学生记录插入到该结点,并对该结点后面的指针下移。

链表长度加一,重新存储。

(5) 程序的输入与输出描述输入:调用LinkList *create()函数,输入学生的姓名、学号、三门功课的成绩;输出:调用void print(LinkList *head)函数,输出学生的记录。

(6) 程序测试主菜单:成绩管理系统的主界面:学生成绩记录的输入:输出学生成绩记录:学生成绩记录的删除(删除学号是1101的学生记录)插入新的学生成绩记录(插入学号为1103的学生记录)(7) 尚未解决的问题或改进方向尚未解决的问题:该成绩管理系统还存在不少缺陷,而且它提供的功能也是有限的,只能实现学生成绩的输入、输出、删除、插入。

猴子选大王问题

猴子选大王问题

这是17世纪的法国数学家加斯帕在《数目的游戏问题》中讲的一个故事:15个教徒和15 个非教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了一个办法:30个人围成一圆圈,从第一个人开始依次报数,每数到第九个人就将他扔入大海,如此循环进行直到仅余15个人为止。

问怎样排法,才能使每次投入大海的都是非教徒。

*问题分析与算法设计约瑟夫问题并不难,但求解的方法很多;题目的变化形式也很多。

这里给出一种实现方法。

题目中30个人围成一圈,因而启发我们用一个循环的链来表示。

可以使用结构数组来构成一个循环链。

结构中有两个成员,其一为指向下一个人的指针,以构成环形的链;其二为该人是否被扔下海的标记,为1表示还在船上。

从第一个人开始对还未扔下海的人进行计数,每数到9时,将结构中的标记改为0,表示该人已被扔下海了。

这样循环计数直到有15个人被扔下海为止。

[编辑本段] 约瑟夫问题的一般形式:约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。

例如N=6,M=5,被杀掉的人的序号为5,4,6,2,3。

最后剩下1号。

假定在圈子里前K个为好人,后K个为坏人,你的任务是确定这样的最少M,使得所有的坏人在第一个好人之前被杀掉。

C++代码示例: #i n c l u d e<i o s t r e a m>u s i n g n a m e s p a c e s t d;v o i d m a i n()i n t n,m,a[101],k,i,j,n um; //计数器是从1开始的,所以100个人用101 c o u t<<"请输入参加游戏的玩家人数(不超过100人):";c i n>>n;c o u t<<"----------------------------------------"<<e nd l;i f(n>100){c o u t<<"玩家太多,请重新登陆此程序!"<<e nd l;r e t u r n;}c o u t<<"输入游戏中要玩的数字:";c i n>>m;c o u t<<"----------------------------------------"<<e nd l;f o r(i=1;i<=n;i++){ a【i】=1;//注意百度百科里不让使用ASCII里的方括号,这里是中文字符集里的方括号,}j=0;k=0;f o r(i=1;i<=n+1;i++){i f(a【i】==1){j=j+a【i】;i f(j==m)j=0;a【i】=0;k++;}i f(k==n){n u m=i;b r e a k;}}i f(i==n+1)i=0;}c o u t<<"最后获胜的玩家是第"<<n u m<<"号玩家!"<<e nd l;c o u t<<"----------------------------------------"<<e nd l;}写完密码约瑟夫就想到原来看到约瑟夫问题的一个数学解法很巧妙很简单不过只能推出最后一个出列的人无论是用链表实现还是用数组实现都有一个共同点:要模拟整个游戏过程,不仅程序写起来比较烦,而且时间复杂度高达O(nm),当n,m非常大(例如上百万,上千万)的时候,几乎是没有办法在短时间内出结果的。

猴子选大王 课程设计报告

猴子选大王      课程设计报告

目录一、需求分析 (1)1、问题描述: (1)2、基本要求: (1)3、需求分析: (1)二、概要设计 (2)三、详细设计 (3)1、循环队列 (3)2、循环链表 (4)3、伪代码 (5)4、具体函数分析及变量分析 (6)四、调试分析和测试结果 (6)五、总结 (9)六、参考文献 (10)七、附录 (11)一、需求分析1、问题描述:一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。

2、基本要求:输入数据:输入m,n。

m,n 为整数,n<m。

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

3、需求分析:①输入数据m,n②计算出最终猴子大王的序号。

③模拟出整个过程。

④找到合适的数据结构处理这个问题。

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

二、概要设计对题意进行分析后,可以画出整个过程的流程图。

具体流程图:这个问题属于约瑟夫环问题,我们对这个题目进行具体分析:假如现在m=5,n=2,即有5只猴子,按照循环数2的方法,我们演变这个过程:第一次:1 2 3 4 5× 2号出局第二次:1 2 3 4 5×× 4号出局第三次:1 2 3 4 5××× 1号出局第四次:1 2 3 4 5×××× 5号出局最后得到猴子大王的序号是3号。

那么一般化,对于m猴子,n只猴子我们该怎么做?三、详细设计1、循环队列队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。

进行插入操作的端称为队尾,进行删除操作的端称为队头。

队列中没有元素时,称为空队列。

仔细分析整个过程,我发现这个过程和学过的循环队列特别像,在学习循环队列的时候,如果采取数组来存储队列,那么在front端弹出元素就执行front=(front+1)%MAX,在rear端进入队列的时候就执行rear=(rear+1)%MAX,以实现绕圈的操作。

课程设计猴子选大王

课程设计猴子选大王

猴子选大王1、课程设计目的:(1)有利于基础知识的理解通过对数据结构的学习,学生掌握了一些信息时代生存与发展必需的信息技术基础知识和基本技能,具备了在日常生活与学习中应用信息技术解决问题的基本态度与基本能力。

(2)有利于逻辑思维的锻炼自主创作程序并写出思路及运行报告,能够较熟练地掌握在系统上编辑、编译、连接和运行C程序的方法。

并通过设计一个完整程序,掌握数据结构的算法编写、类C语言算法转换成C程序并上机调试的基本方法。

(3)有利于治学态度的培养。

程序设计中,语句的语法和常量变量的定义都有严格的要求,有时输错一个标点、打错了一个字母,编译就不通过,程序无法正常运行。

因此,程序设计要求人的严谨性,可能要通过几次乃至十多次的反复修改、调试,才能成功,但这种现象会随着学习的深入而慢慢改观。

这当中就有一个严谨治学、一丝不苟的科学精神的培养,又有一个不怕失败、百折不挠品格的锻炼2、课程设计方案论证:2.1课程设计题目及简介:内容:一堆猴子(m个)每一只都有编号,编号为1,2,3,4...m 这群猴子按照1-m的顺序排列从第一个开始数,没数到第N个,该猴子就要离开。

这样一次下来,直到剩下最后一只猴子,则这只猴子为大王。

2.1.1设计说明:本设计通过循环链表建立约瑟夫环。

约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。

从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。

这种方式非常类似于猴子选大王。

由于本题目的数据元素个数不可知,所以可使用链表来动态的分配内存空间。

而该问题又是一个不断的循环问题所以用循环链表来实现。

总体设计:首先生成一个空链表,并给n 个结点分配空间,让单链表的表尾指针指向头结点则生成一个带有n 个结点的循环单链表。

再给每只猴子建立顺序的编号。

现从第一个结点开始报数,依次顺序查找出报数为i 的待出列的结点(猴子)通过p->next = pass->next;。

c猴子选大王的课程设计

c猴子选大王的课程设计

c 猴子选大王的课程设计一、课程目标知识目标:1. 学生能理解并掌握猴子选大王问题中的数学原理,包括排序和比较大小。

2. 学生能够运用所学知识解决类似猴子选大王的问题,如排序不同数字或物品。

技能目标:1. 学生培养观察、分析问题的能力,通过小组讨论与合作,提高问题解决技巧。

2. 学生通过实际操作,加强运用逻辑思维和数学方法解决问题的技能。

情感态度价值观目标:1. 学生培养对数学学习的兴趣,增强自信心,认识到数学与日常生活的紧密联系。

2. 学生在小组活动中,学会尊重他人意见,培养团队合作精神和公平竞争的意识。

3. 学生通过猴子选大王的故事,理解公平、公正的价值观,并能够在生活中践行。

课程性质:本课程为数学学科的一节实践活动课,结合二年级学生的认知水平和兴趣特点,设计富有情境性和趣味性的教学内容。

学生特点:二年级学生对数学有好奇心,喜欢通过故事和游戏学习。

他们具备一定的观察、比较和逻辑思维能力,但需要进一步培养和提高。

教学要求:教师需以学生为主体,关注个体差异,采用情境教学法和合作学习法,激发学生兴趣,引导他们主动参与。

同时,注重培养学生的逻辑思维和问题解决能力,将情感态度价值观的培养贯穿于教学过程中。

通过具体的学习成果评估,确保学生达到预设的课程目标。

二、教学内容本节教学内容以《数学》二年级教材中“比较大小”章节为基础,结合“猴子选大王”的故事情境,组织以下教学活动:1. 引入:通过讲述“猴子选大王”的故事,激发学生兴趣,引导学生关注故事中的数学问题。

2. 新课导入:a. 教学内容:比较大小,理解数字顺序。

b. 教学方法:采用直观演示、小组讨论等形式,让学生掌握比较大小的方法。

3. 教学主体:a. 教学内容:猴子选大王问题,运用比较大小的方法进行排序。

b. 教学方法:分组合作,让学生在活动中体验数学原理,培养问题解决能力。

4. 巩固练习:a. 教学内容:设计不同难度的练习题,让学生巩固比较大小的方法。

猴子选大王

猴子选大王

云南大学物理实验教学中心实验报告课程名称:计算机软件技术基础实验项目:线性链表的应用(猴子选大王)学生姓名:吴莹盈学号:20101050040物理科学技术学院物理系2010 级电子科学与技术专业指导教师:马琳实验时间:2012 年12 月 1 日至12 月15 日实验地点:力行楼4202实验类型:教学(演示□验证□综合□设计□)学生科研□课外开放□测试□其它□云南大学物理实验教学中心实验预习报告一.实验名称:线性链表的应用(猴子选大王)二.实验目的:在实习三的基础上,用线性链表解决一个应用问题。

三.实验所需解决问题:问题:约瑟夫问题(Joseph)的求解。

问题描述:n只猴子要选大王,选举方法是:所有猴子按1、2、3、……、n编号顺时针方向围坐一圈,从第1号开始按1、2、3、……、m报数,凡报到m号的退出圈外,如此循环报数,直到圈内剩下一只猴子时,这只猴子就是大王。

试设计一个C程序,输出猴子出列顺序。

基本要求:利用单循环链表存储结构模拟此过程,n和m值由键盘输入,按照出列的顺序打印各个猴子的编号。

四.实验程序设计:#include <iostream>#include <string>#include <iomanip>using namespace std;struct monkey{ int num;int d;monkey *head;monkey *next;};class linked_CList //定义循环链表类{private:monkey *head;monkey *tail;public:linked_CList(); //建立循环链表int del_linked_CList(int); //删除选中的猴子int sel_linked_CList(int);};linked_CList::linked_CList() //建立空循环链表{monkey *p;p=new monkey;p->d=0;p->next=p;head=p;return;}int linked_CList::del_linked_CList(int nn) //删除选中的猴子{ int i;monkey *p,*q; //声明monkey结构指针p,qp=new monkey;p->num=1;p->next=NULL;head=p;q=p;for(i=2;i<=nn;i=i+1){ p=new monkey;p->num=i;q->next=p;q=p;p->next=NULL; }tail=q;tail->next=head;return nn;}int linked_CList::sel_linked_CList(int mm) // mm表示结点删除间隔{ int x=0;monkey *p,*q;q=tail;do{ p=q->next;x=x+1;if(x%mm==0) //x是否整除mm{ cout<<"被删除的猴子号为"<<p->num<<"号\n";q->next=p->next; //删除此结点delete p;p=NULL;}elseq=p; //q指向相邻的下一个结点p}while(q!=q->next); //剩余结点数不为1,则继续循环head=q; //head指向结点q,q为链表中剩余的一个结点cout<<"猴王是"<<head->num<<"号\n"; //输出猴王return mm;}//////////////////////////////////////////////////////////////////////////////////////////主函数int main(){ int mx;linked_CList s;label1:while(1){ cout<<"0.退出程序"<<endl;cout<<"1.猴子选大王"<<endl;cout<<"请输入0—1:";cin>>mx;switch(mx){ case 1:int n,m;monkey *head;head=NULL;cout<<"请输入猴子的总数\n";cin>>n;cout<<"请输入间隔\n";cin>>m;s.del_linked_CList(n);s.sel_linked_CList(m);delete head; //删除循环中最后一个结点break;return 0;case 0:cout<<"安全退出程序";return 0;}}}五.实验步骤:1.根据线性链表的特性和实验三的步骤,将猴子选大王这个程序的基本步骤,即整体结构先编译完成2.逐步细化,编译各个函数。

中大班表演游戏动物王国选大王教案

中大班表演游戏动物王国选大王教案

中大班表演游戏动物王国选大王教案第一篇:中大班表演游戏动物王国选大王教案2013级学前教育专业《幼儿园活动设计与组织》课程作业单游戏设计方案设计者:陈钰婕熊莉粟润王雅婧刘梦洁游戏名称:动物王国选大王适宜年龄:5~6岁游戏类别:表演游戏游戏玩法:按故事情节表演游戏;轮流表演不同角色游戏规则:按照故事情节及动物的出场顺序,开展表演;在其他幼儿表演时,安静认真的观看,不随意打断;在表演结束后,分享自己的经验、感受。

游戏道具:狮子、老鼠、小猫、小白兔、牛、狐狸、小鸭子、小羊、小鸟等动物的头饰教育意义:让幼儿在表演中加强对故事的理解,表演出不同动物的不同特征,认识秩序的重要性;在表演中提高幼儿的合作意识,学会和同伴协商,轮流扮演不同角色;鼓励幼儿思考如何更好地设计和布置表演场地,学会正确使用和替代游戏材料;增强幼儿爱护游戏材料的意识,学会收拾和整理游戏材料。

第二篇:大班表演游戏学期目标1、根据自己对文学作品的理解,激发幼儿积极的参加游戏表演。

2、通过参与表演游戏活动和扮演角色,加深对文学作品的理解,并激发幼儿对文学作品的兴趣。

3、让幼儿主动参与表演游戏活动,在语言、动作、情节表演上增色或更生动,从而提高幼儿的想象力、创造力和表演能力。

4、让幼儿学会与同伴协商分配角色,协调配合,合作游戏,正确处理游戏中的纠纷,提高幼儿解决问题的能力。

5、会用连贯的语言(包括体态语言)进行表演6、培养幼儿处理事物的正确态度和良好的学习品质。

7、让幼儿学会正确使用自制和替代的游戏材料。

8、学会有调理地归类收拾玩具、整理场地9月份游戏主题:《金鸡冠的公鸡》一、活动目标1、通过对作品的理解,能在角色对话、动作、表情等方面有所创新,积极地参与表演。

2、能正确处理游戏中的纠纷,会较正确地评价自己和别人。

二、活动准备:头饰:公鸡、画眉鸟、猫、小蝌蚪、青蛙、鸭妈妈、小鸭、大鱼、鹅、乌龟道具:荷叶、房子、六弦琴,池塘。

知识经验准备:幼儿已能复述故事四游戏指导:第一次指导:1、教师出示头饰:“上次老师给你们讲了《金鸡冠的公鸡》,你们还记得里面有哪些人物吗?讲了哪些对话?”请幼儿一起来复习故事里的对话。

课程设计猴子选大王

课程设计猴子选大王

课程设计猴子选大王一、教学目标本课程旨在通过《猴子选大王》的故事,让学生掌握成语“猴子选大王”的含义和用法,了解中国传统文化中的成语故事,培养学生的阅读兴趣和语言表达能力。

1.学生能够理解并正确使用成语“猴子选大王”。

2.学生能够讲述《猴子选大王》的故事内容。

3.学生能够了解成语背后的中国传统文化。

4.学生能够通过阅读和讨论,提高自己的语言表达能力。

5.学生能够运用成语“猴子选大王”进行句子创作。

情感态度价值观目标:1.学生能够培养对中国传统文化的兴趣和认同感。

2.学生能够通过学习成语故事,培养正确的价值观和道德观念。

二、教学内容本课程的教学内容以《猴子选大王》的故事为主线,通过讲解成语的含义和用法,引导学生了解中国传统文化中的成语故事。

1.导入:介绍成语“猴子选大王”的由来和含义。

2.新课内容:讲解《猴子选大王》的故事情节,分析成语的用法。

3.练习:学生进行成语接龙游戏,巩固所学内容。

4.拓展:引导学生思考成语在现实生活中的应用,进行案例分析。

教材章节:《猴子选大王》故事及相关练习。

三、教学方法本课程采用多种教学方法,以激发学生的学习兴趣和主动性。

1.讲授法:教师讲解成语的含义和用法,引导学生理解故事内容。

2.讨论法:学生分组讨论成语的用法和现实生活中的应用。

3.案例分析法:教师提供案例,引导学生分析成语在案例中的作用。

4.实验法:学生进行成语接龙游戏,提高语言表达能力。

四、教学资源本课程所需教学资源包括:1.教材:《猴子选大王》故事及相关练习。

2.参考书:提供有关成语和中国传统文化的参考资料。

3.多媒体资料:图片、视频等辅助教学资料。

4.实验设备:成语接龙游戏所需道具。

教学资源的选择和准备应充分支持教学内容和教学方法的实施,丰富学生的学习体验。

五、教学评估本课程的评估方式包括平时表现、作业和考试,以全面客观地反映学生的学习成果。

1.平时表现:通过观察学生在课堂上的参与度、讨论和提问,评估学生的学习态度和理解程度。

猴子选大王问题

猴子选大王问题

这是17世纪的法国数学家加斯帕在《数目的游戏问题》中讲的一个故事:15个教徒和15 个非教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了一个办法:30个人围成一圆圈,从第一个人开始依次报数,每数到第九个人就将他扔入大海,如此循环进行直到仅余15个人为止。

问怎样排法,才能使每次投入大海的都是非教徒。

*问题分析与算法设计约瑟夫问题并不难,但求解的方法很多;题目的变化形式也很多。

这里给出一种实现方法。

题目中30个人围成一圈,因而启发我们用一个循环的链来表示。

可以使用结构数组来构成一个循环链。

结构中有两个成员,其一为指向下一个人的指针,以构成环形的链;其二为该人是否被扔下海的标记,为1表示还在船上。

从第一个人开始对还未扔下海的人进行计数,每数到9时,将结构中的标记改为0,表示该人已被扔下海了。

这样循环计数直到有15个人被扔下海为止。

[编辑本段] 约瑟夫问题的一般形式:约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。

例如N=6,M=5,被杀掉的人的序号为5,4,6,2,3。

最后剩下1号。

假定在圈子里前K个为好人,后K个为坏人,你的任务是确定这样的最少M,使得所有的坏人在第一个好人之前被杀掉。

C++代码示例: #i n c l u d e<i o s t r e a m>u s i n g n a m e s p a c e s t d;v o i d m a i n(){i n t n,m,a[101],k,i,j,n u m;.n-2,n-1,0,1,2,...k-2并且从k开始报0。

现在我们把他们的编号做一下转换:k-->0 k+1--> 1k+2--> 2......k-2-->n- 2k-1-->n- 1 变换后就完完全全成为了(n-1)个人报数的子问题,假如我们知道这个子问题的解:例如x是最终的胜利者,那么根据上面这个表把这个x变回去不刚好就是n个人情况的解吗?!!变回去的公式很简单,相信大家都可以推出来:x'=(x+k)m o d n 如何知道(n-1)个人报数的问题的解?对,只要知道(n-2)个人的解就行了。

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

课程设计报告课程设计题目:猴子选大王学生姓名:吴兆专业:软件工程班级:1321813学号:201320181306指导教师:吴建东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");}}}。

相关文档
最新文档