猴子选大王上机报告
猴子选大王上机报告

重庆交通大学信息科学与工程学院综合性设计性实验报告专业:课程名称:《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指向上一个结点,为下一次数数做准备*/}}二、猴子选大王重点及关键技术分析程序通过循环链表较好的实现了猴子选大王的功能,但是还是有许多值得思考的地方。
猴子当大王的寓言故事

猴子当大王的寓言故事(原创实用版4篇)目录(篇1)1.故事背景和角色介绍2.猴子成为大王的过程3.猴子大王的治理方式4.猴子大王的下场5.故事的寓意正文(篇1)在很久很久以前,有一片茂密的森林里,住着各种各样的动物。
它们和谐相处,共同维护森林的生态平衡。
在这片森林里,狮子是当时的大王,它公正而明智地统治着这片土地。
然而,有一天,狮子因年事已高,决定将王位传给有能力的动物。
猴子作为森林里的智者,被众多动物推举为大王的候选人。
在众多动物的期待中,猴子开始了它的大王之路。
然而,猴子成为大王后,却逐渐变得贪婪和自私。
它开始压迫其他动物,霸占资源,甚至不允许其他动物靠近它。
在猴子的统治下,森林的生态平衡逐渐被破坏。
动物们开始对猴子大王心生不满,森林里的和谐氛围不复存在。
猴子大王不仅没有意识到自己的错误,反而变本加厉地压迫动物们,甚至对其他动物实施暴力。
有一天,不堪忍受猴子大王压迫的动物们决定联合起来,推翻猴子的统治。
在众多动物的共同努力下,猴子大王被赶下了宝座,恢复了狮子的统治。
森林重新回到了和谐安宁的状态。
这个寓言故事告诉我们,权力和地位并不能让人变得伟大。
一个人或一个动物,只有心怀善念,关爱他人,才能赢得他人的尊重和敬仰。
当权力和地位用来满足私欲时,必将遭到众人的反抗和唾弃。
目录(篇2)1.猴子与森林中的其他动物2.猴子成为大王的过程3.猴子大王的统治4.猴子大王的下场正文(篇2)在很久很久以前,有一片富饶的森林里,住着各种各样的动物。
它们和睦相处,共同维护着森林的生态平衡。
在这片森林中,猴子以其聪明才智而闻名,它们不仅擅长攀爬,还拥有独特的模仿能力。
有一天,森林中的狮子国王因为年事已高,决定将王位传给一位有能力的动物。
于是,狮子国王召集了森林里的所有动物,宣布将举行一场比赛,选拔出新的国王。
这场比赛分为三个阶段,分别是智慧、力量和勇气。
经过激烈的比拼,猴子脱颖而出,以其卓越的表现赢得了狮子国王的认可。
猴子选大王

数据结构课程设计报告题目:猴子选大王院(系):计算机工程学院专业:计算机科学与技术班级:嵌入式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. 学生能够理解故事《猴子选大王》的主要情节,掌握故事中出现的生词和关键句型。
2. 学生能够运用一般现在时和一般过去时描述故事中猴子的行为和动作。
3. 学生了解并掌握故事中所传达的公平、公正和团队合作的重要性。
技能目标:1. 学生能够通过听力训练,提高对英语语音、语调的辨识能力。
2. 学生能够通过角色扮演,锻炼口语表达和沟通能力。
3. 学生能够运用创意思维,编写属于自己的猴子选大王故事。
情感态度价值观目标:1. 学生通过学习故事,培养公平竞争、尊重他人的价值观。
2. 学生在小组合作中,学会倾听、关心和帮助同伴,培养团队协作精神。
3. 学生在课堂活动中,树立自信、勇敢表达自己观点的态度。
分析课程性质、学生特点和教学要求,本课程将目标分解为以下具体学习成果:1. 学生能够复述故事《猴子选大王》的主要情节,正确使用故事中的生词和关键句型进行描述。
2. 学生能够在角色扮演活动中,运用一般现在时和一般过去时表达猴子的行为和动作。
3. 学生能够通过小组合作,编写并表演一个关于猴子选大王的故事,展现公平、公正和团队合作的重要性。
4. 学生在课程学习中,积极参与课堂活动,展示良好的倾听、沟通和协作能力,体现出自信、尊重和关心他人的态度。
二、教学内容本节课以《猴子选大王》故事为主线,结合英语课程标准和学生实际情况,组织以下教学内容:1. 故事导入:通过图片、视频等教学资源,引导学生了解故事背景,激发学生的学习兴趣。
2. 故事学习:详细讲解故事《猴子选大王》的情节,重点讲解生词、关键句型和语法知识点。
- 生词:选举、候选、公平、公正、竞争、团队等。
- 句型:一般现在时、一般过去时的陈述句、疑问句和否定句。
- 语法:比较级、最高级的运用。
3. 角色扮演:学生分组进行角色扮演,运用所学知识进行对话练习,锻炼口语表达能力。
4. 小组合作:以小组为单位,编写一个关于猴子选大王的故事,要求运用所学生词、句型和语法。
数据结构课程设计(附代码)-数据结构设计

上海应用技术学院课程设计报告课程名称《数据结构课程设计》设计题目猴子选大王;建立二叉树;各种排序;有序表的合并;成绩管理系统;院系计算机科学与信息工程专业计算机科学与技术班级姓名学号指导教师日期一.目的与要求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) 尚未解决的问题或改进方向尚未解决的问题:该成绩管理系统还存在不少缺陷,而且它提供的功能也是有限的,只能实现学生成绩的输入、输出、删除、插入。
猴子选大王课程设计总结

《数据结构》课程设计报告计算机与信息工程系《数据结构》课程设计评阅表一、引言1、目的(1)本次程序程序设计的主要目的是解决变相的“约瑟夫环”问题---猴子大王。
从而使复杂的甄选工作变得明朗简单化。
同样,这种解决问题的思想还可以运用到其他具有类似问题的领域,达到一点窥面的效果。
2、课程设计要求针对本次猴子数为m,循环数为n的猴子选大王问题,要求如下:(1)基本要求:输入数据m,n为整数。
(2)输出形式:中文提示按照m个猴子,数n个数的方法,输出为大王的猴子几号,建立一个函数来实现此功能。
(3)实现方案:使用循环单链表。
3、课程设计实验环境:C语言4、意义培养我们的数据抽象能力。
利用单向循环链表模拟此过程,输出选出的大王编号。
通过本课程设计,可加深我们对链表的了解,对今后的学习有很大帮助。
5、功能实现全程序以数据结构(C语言)中的循环单链表为主要的设计支柱,利用了C语言简洁紧凑、灵活方便,语法限制不太严格,程序设计自由度大,生成目标代码质量高,程序执行效率高等方面的优点。
循环单链表是单链表的另一种形式,其结构特点是链表中最后一个结点的指针域不再是结束标记,而是指向整个链表的第一个结点,从而使链表形成一个环,基于这样的特点,它适合处理具有环形结构的数据元素序列。
在程序代码的编写中,运用了结构体类型(struct Node),动态申请内存空间函数malloc(),释放动态申请内存空间函数free()等类型,同时也具有多种循环、条件语句控制程序流向,如:嵌套if else语句,多重for循环语句,还有链表中结点指针(p->next),从而使程序完全结构化。
这样编写出的完整程序代码可以实现“猴子选大王”功能,输入猴子的数目m,循环数n,对m个猴子进行编号,通过嵌套if else语句,for语句,一遍一遍的循环,判断,删除,直到只剩下最后一个猴子,即大王。
这样就可以实现所需的基本功能了。
二、设计过程1、头文件说明① #include<stdio.h>此程序主要以C语言为编写语言,因此在程序中要用到系统提供的标准库函数中的输入,输出函数,例如:scanf()函数,printf()函数。
猴子选大王

一. 需求分析:猴子选大王是一个小游戏,其规则是:假设n个猴子围成一堆,取数字m为将要被淘汰的数字,从第一个猴子开始数,数到数字m时,则该猴子出列,被淘汰,然后从被淘汰的猴子的下一个开始数,再数到数字m时,这个猴子也被淘汰,从下一个开始数,依次进行,直到剩下一个猴子结束。
该猴子即猴子大王。
二. 概要设计:该程序没有抽象数据类型,主要用循环和数组实现,先用数组存放猴子,假定一个猴子的最大个数,再通过参数传递一个正确的猴子(将要做游戏的猴子数),先将猴子初始化为0,用一个计数器存countone存放剩余的猴子的个数,用sum存放数字,即从1到m 的数字,当countone>0时,进行循环,先将countone记为0,当循环等于m时,一次循环结束,否则countone加1,依次进行第二次的循环,直到剩下一个猴子为止,并记下当m!sum是的猴子,为幸运猴子大王。
三. 详细设计:int choose(int num,int del) //num表示猴子总数,del表示将要被淘汰的猴子总数{for(i=0;i<num;i++)a[i]=1; //猴子初始化,为1表示还有希望被选为大王while(countOne>1) //是否进行继续淘汰的判断,其中放剩余的猴子个数{countOne=0;for(i=0;i<num;i++){sum+=a[i];if(sum==del) //del同时也记录了每次数数的结束sum=a[i]=0; //淘汰倒霉猴子;countOne+=a[i]; //是和if相匹配语句,当判断条件不成立时执行}for(i=0;i<num;i++)if(a[i]!=0)return i; //找到幸运猴子编号(从0开始的);}void main(){int num,del;cout<<"请输入猴子总数和淘汰数字:";cin>>num>>del;cout<<"第"<<choose(num,del)+1<<"个猴子为王!"<<endl;}四.调试分析:输入猴子总个数,在输入将要淘汰的猴子的个数时,能正确输出所选的大王猴子,调试正确无误。
猴子选大王 课程设计报告

目录一、需求分析 (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 猴子选大王的课程设计一、课程目标知识目标: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.逐步细化,编译各个函数。
python练习题4.18猴子选大王

python练习题4.18猴⼦选⼤王
⼀群猴⼦要选新猴王。
新猴王的选择⽅法是:让N只候选猴⼦围成⼀圈,从某位置起顺序编号为1~N号。
从第1号开始报数,每轮从1报到3,凡报到3的猴⼦即退出圈⼦,接着⼜从紧邻的下⼀只猴⼦开始同样的报数。
如此不断循环,最后剩下的⼀只猴⼦就选为猴王。
请问是原来第⼏号猴⼦当选猴王?
输⼊格式:
输⼊在⼀⾏中给⼀个正整数N(≤1000)。
输出格式:
在⼀⾏中输出当选猴王的编号。
代码如下:(官⽅代码)
#!/usr/bin/python
# -*- coding: utf-8 -*-
N=int(input())
ls=[i for i in range(1,N+1)]
step=2 #步长
ptr=1
while len(ls) > 1:
#ptr表⽰列表中第⼏个元素,没有第0个元素,只有下标为0的元素
ptr=(ptr+step-1)%len(ls)+1
#ptr 是下⼀个开始的位数
del ls[ptr-1]
print(ls[0])
这个程序的难点就在于ptr=(ptr+step-1)%len(ls)+1这句代码,说实话,我现在都不是特别特别明⽩。
下⾯是官⽅讨论链接,⼤家可看看。
读书和健⾝总有⼀个在路上。
PHP实现猴子选大王问题的算法

PHP 实现猴子选大王问题的算法PHP 实现猴子选大王问题的算法我们的事业就是学习再学习,努力积累更多的知识,因为有了知识,社会就会有长足的进步,人类的未来幸福就在于此。
以下是店铺为大家搜索整理的PHP 实现猴子选大王问题的算法,希望对大家有所帮助!一、问题:n 只猴子围坐成一个圈,按顺时针方向从1到n 编号。
然后从1号猴子开始沿顺时针方向从1开始报数,报到m 的猴子出局,再从刚出局猴子的`下一个位置重新开始报数,如此重复,直至剩下一个猴子,它就是大王。
设计并编写程序,实现如下功能:(1) 要求由用户输入开始时的猴子数$n 、报数的最后一个数$m 。
(2) 给出当选猴王的初始编号。
二、解决方法:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 /*** @param int $n 开始时的猴子数量* @param int $m 报道的最后一个数*(报到这个数的猴子被淘汰,然后下一个猴子重新从①开始报数) * @return int 猴子的初始编号*/function monkeySelectKing($n,$m){//猴子的初始数量不能小于2if ($n<2){return false;}$arr=range(1,$n);//将猴子分到一个数组里, 数组的值对应猴子的初始编号$unsetNum=0;//定义一个变量,记录猴子的报数20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 for ($i = 2; $i <=$n*$m ; $i++)//总的循环次数不知道怎么计算,{//不过因为循环中设置了return,所以$m*$len 效率还可以 foreach ($arr as $k => $v){$unsetNum++; //每到一个猴子, 猴子报数+1//当猴子的报数等于淘汰的数字时:淘汰猴子(删除数组元素) //报数归0(下一个猴子从1开始数)if ($unsetNum==$m){// echo "<pre>";//打开注释,可以看到具体的淘汰过程 // print_r($arr);unset($arr[$k]);//淘汰猴子$unsetNum=0;//报数归零if (count($arr)==1)//判断数组的长度, 如果只剩一个猴子, 返回它的值 {return reset($arr);}}}}}var_dump(monkeySelectKing(6, 3));补充改进算法(该算法更加简洁明了!):1 2 3 4 5 6 7 8 9 function yuesefu($n,$m) {$r=0;for($i=2; $i<=$n; $i++) {$r=($r+$m)%$i;}return $r+1;}print_r(yuesefu(3,3));。
用C编写程序猴子选大王

湖南人文科技学院计算机系课程设计说明书课程名称: 数据结构课程代码:题目: 猴子选大王年级/专业/班: 06级计算机科学与技术专业一班学生姓名:学号:06408109 06408102 06408107 0640812206408103指导教师: 刘刚常开题时间: 2008 年 6 月16 日完成时间: 2008 年 6 月29 日目录摘要 (3)一、引言 (4)二、设计目的与任务 (4)三、设计方案 (5)1、总体设计 (5)2、详细设计 (8)3、程序清单 (14)4、程序调试与体会 (22)5、运行结果 (23)四、结论 (24)五、致谢 (24)六、参考文献 (25)摘要本文首先介绍顺序表和链表并作以比较,我们分别使用循环队列和循环链表来解决猴子选大王的问题,程序使用了C语言编写,有很少一部分函数是用C++编写的,有比较详细的中文注释并在VC++下调试运行通过。
整个程序使用中文界面,并有相应的提示信息,便于操作和程序运行。
关键词:循环队列;循环链表;存储结构AbstractThis paper details the difference of sequence list and linklist.We respectively use queue and circular queue and circular linked list to solve the seek elected king of the monkey problem . The procedure write with C language ,a very small part function is used by the C + +,and has chinese explanatory note.What’s more,it was debugged in VC++ debugger and run very well.The whole procedure,with Chinese interface and thecorresponding hints,is convenient to run and easy to be operated.Keywords : circular queue;circular linked list ;storage structure《数据结构》课程设计——猴子选大王一、引言数据结构是一门非常重要的基础学科,但是实验内容大都不能很好的和实际应用结合起来。
funcode实验报告范例

源代码
在Main.cpp文件中
//----------------------------------------------------------------------------// //----------------------------------------------------------------------------#include "CommonAPI.h" #include<stdio.h> #include<time.h> float g_fDelayTime; int int int int int int int g_iMonkeys[6] = {1,2,3,4,5,6}; g_iNumMokeys=6; g_iNumLoseMonkeys=0; g_iMoveMonkey = 0; g_iChooseMonkey; g_flocation[6]; g_iGameState=0;
x = -40+i*16; y = -3; dSetSpritePosition(szName,x,y); g_flocation[i] = x; } // 引擎主循环,处理屏幕图像刷新等工作 while( dEngineMainLoop() ) { // 获取两次调用之间的时间差,传递给游戏逻辑处理 float fTimeDelta = dGetTimeDelta(); if(g_iMoveMonkey > 0) { g_fDelayTime -= fTimeDelta; if(g_fDelayTime<0) { g_fDelayTime = 1; char *szName dMakeSpriteName("monkey",g_iMonkeys[g_iChooseMonkey]); dSetSpritePosition(szName, g_flocation[g_iChooseMonkey],-3); g_iChooseMonkey++; g_iMoveMonkey--; } } else if(g_iNumMokeys > 1 && g_iGameState != 0) { g_iGameState = 1; } else if(g_iGameState != 0) { g_iGameState = 0; dSetSpriteVisible("start",true); }
猴子选大王(C语言实现)

题目:猴子选王一堆猴子都有编号,编号是1,2,3 ...m,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
要求:m及n要求从键盘输入,存储方式采用向量及链表两种方式实现该问题求解。
#include <stdio.h>struct monkey{int num;monkey *next;};monkey *head,*tail;void creat(int n){int i;monkey *p,*q;p=new monkey; //为p分配内存空间p->num=1; //初始化p结点num域为1p->next=NULL; //初始化p结点next域为空head=p; //链表头指针head赋值为pq=p;for(i=2;i<=n;i=i+1) //循环存入猴子{p=new monkey; //为p配内存空间p->num=i; //初始化p结点num域为i,表示猴子号q->next=p; //将p点加到链表尾部q=p; //让指向链表尾部结点p->next=NULL; //链表尾部指向空}tail=q; //链表尾tail->next=head; //链表尾部指向链表头,形成循环链表}void select(int n){int x=0;monkey *p,*q;q=tail; //q赋值给tail,指向循环链表尾部do //直到型循环,用于循环删除指定间隔的结点{p=q->next; //p赋值给相邻的下一个结点x=x+1; //x加1if(x%n==0) //x是否整除m{printf("%d号猴子淘汰\n",p->num);q->next=p->next; //删除此结点delete p; //释放空间p=NULL;}else q=p; //q指向相邻的下一个结点p }while(q!=q->next); //剩余结点数不为1,则继续循环head=q; //head指向结点q,q为链表中剩余的一个结点}void main(){int n,m;head=NULL; //初始化head为空printf("请输入猴子的个数\n");scanf("%d",&m);printf("请输入n\n");scanf("%d",&n);creat(m); //调用函数creat建立循环链表select(n); //调用函数select,找出剩下的猴子printf("猴王是%d号\n",head->num); //输出猴王delete head; //删除循环中最后一个结点}#include<stdio.h>int main(){int a[1000];//定义一个较大的数组存储数据int m,n,x,count,i;//定义猴子数m、输入n、所需变量x、cout、iprintf("请输入猴子个数:\n");//提示输入mscanf("%d",&m);printf("请输入n:\n");//提示输入nscanf("%d",&n);for(i=1;i<=m;i++) //令数组与猴子编号对应a[i]=i;count=m;//令cout等于猴子个数x=0;//令x初始值为零for(i=0;count>1;i++)// 执行循环,淘汰的猴子值为-1,直到只剩一只猴子,即为猴王{if(a[i%m+1]!=-1) {x++;}if(x==n&&a[i%m+1]!=-1){a[i%m+1]=-1;count--;x=0;printf("%d号猴子淘汰\n",i%m+1);} }for(i=1;i<=m;i++) //输出值不为-1的猴子,即猴王if(a[i]!=-1) printf("猴王是%d号\n",i);}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
重庆交通大学信息科学与工程学
院
综合性设计性实验报告
专业:
课程名称:《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开始报数,依次循环,直到圈内剩下一只猴子为止,该编号的猴子就是所选出的大王。
下面四张图片是运行结果的截图,前两张是用数组方法做的,一组数据为m=5,n=3;另一组数据为m=15,n=7;后两张是链表做的,测试数据同数组一样,运行结果也一样。
五.设计体会
1、取得的成效及主要收获
经过一个星期的努力,最终完成这个综合性试验报告,总的来说过程是十分艰辛的。
因为这艰辛的过程,我对数组,指针,链表的理解变得更加的深刻,运用起来也比以前更加熟悉。
对我来说这次的题目是比较有难度的,所以在算法的
设计方面花了很多时间,因此现在的思维相比以前更加开阔了一些,不再局限于某一些算法,还让我认识到了循环结构的重要性,因此对循环结构有了比较好的掌握。
在设计过程中经常会因为一点小问题没有考虑到而出错,比如取余的时候是否需要加一或者减一,这让我在以后的设计中会更加的细心谨慎。
还有就是通过这次的实验,我在敲写代码时的思维变得更加清晰并且不再畏惧那些一开始不会的题目。
2、存在的主要问题
因为这次实验涉及到数组和链表,我对于数组比较熟悉,却不太熟悉链表,所以在做链表的时候请教了不少同学,期间出过很多错误,我希望以后可以自己独立完成一个链表的设计并且减少错误的发生。
虽然老师上课有讲到可以用到取余的算法,但是由于数组最开始是a[0],而编号是1,所以我在设计循环时产生了一种混乱的现象,最后在询问同学的情况下才完成了,因此以后我要更加有逻辑性。
因为用到循环,所以有几次运行都没有结果,应该是跳不出循环结构造成的,我到现在都不知道为什么跳不出来。
还有一个最重要的问题就是我用的两种做法都没有用到函数,因为我尝试用函数的时候老是会有问题,不知道出于什么原因。
3、对教学工作的建议
上了一学期的C语言,我有一个很深的感触就是我们上得好快,虽然一些慨念性的东西没有必要讲那么久,但是我还是觉得适当慢一点会让我们学生比较好消化。
老师在上课给我们举例子的时候可以请同学说一说他的想法,要不然一直是老师一个人在敲,我们有时候会跟不上或者没有接受到自己的头脑里。
还有一点就是我感觉老师把所有的教学重点都放在了设计算法,敲写代码上面,毕竟我们要参加期末考试还有二级考试,虽然我知道这不是我们的目标,但是我觉得老师还是可以适当讲一些题目,让我们感受感受。
以上只是我一个人的看法,打心底里讲还是觉得老师教得很好。