猴子选大王数据结构课程设计报告内附详细注释
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.需求分析问题定义:一堆猴子都有编号,编号是1,2,3…n,这群猴子(n个)按照1-n的顺序围坐一圈,从第1个开始数,每数到第m个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。m,n键盘输入,且m 问题分析:根据任务描述可知,编号是1,2,3…n的一群猴子按照1-n的顺序围坐一圈,因此可以用指针指向数组的方法给数组赋值,输入n值和m值,为保证m #include #include void FindKing_pointer(int,int,int*);//移动指针法找大王void Initialize(int,int*);//初始化数组整形和指针型int main() { int m,n,*ptr; printf("输入猴子数与出局时报的数\n"); scanf("%d %d",&n,&m); while(n { printf("输入数据有误,请重新输入!\n"); printf("输入猴子数与出局时报的数\n"); scanf("%d %d",&n,&m); } ptr=(int *)calloc(n,sizeof(int)); Initialize(n,ptr); FindKing_pointer(m,n,ptr); free(ptr); return 0; if(ptr2==ptr+n) ptr2=ptr; /*指针所指元素不为0时计数器加1.*/ if(*ptr2!=0) i++; /*计数器数到m时将指针所指元素设为0*/ if(i==m) { *ptr2=i=0; count--; //用于终止循环 } } /*最后不为0的元素的值即为大王的编号*/ for(ptr2=ptr;;ptr2++) { if(*ptr2!=0) { printf("第%d个猴子是大王\n",*ptr2); break; } } } /*思想是猴子围坐一圈,有N个猴子,开始数数,数到第M个猴子,该猴子就出列, 然后再从该猴子的下一个猴子开始数到第M个猴子,直到只剩下一个猴子时。该猴子就是所要选得大王*/ 4.结果分析 5.设计总结 在课程设计中,首先要看清问题,将问题要求理解透彻,在构思要如何实现,要用到哪 才能接下来的工作,将流程图画在纸上,再依次编写代码,在程序设计中,编写代码只是一个方面,调试才是关键。它是一个相当繁琐的过程,有许多新的问题需要被解决,但同时它也是一个比较重要的过程,因为在程序调试过程中,你会学到很多新的东西,从而增加你编程的经验。通过本次实习,温固了数据结构的相关知识,加深对课内所学的有关数据的逻辑结构和存储表示、数据结构的选择和应用、算法的设计和时空效率分析等课程基本内容的理解,进一步熟悉了VC++编程环境,巩固并提高了分析问题、解决实际问题的能力。