黑马程序员--C语言之数据结构解决问题
2014-07-23 00:42
363 查看
----------------------ASP.Net+Unity开发、.Net培训、期待与您交流!----------------------一、问题描述:有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。设计要求:1)采用数组数据结构实现上述求解;2)采用链数据结构实现上述求解;3)采用递归实现上述求解。4) 如果采用4种方法者,适当加分二、概要设计 可适当参考以下提示: ⑴ 数据结构struct sz{ //数组链表定义int sum;int i;}a[11];struct lb{ //动态链表定义int sum;int i;struct lb*next;}; ⑵ 模块划分 void fn1(char *p) //欢迎界面void fn2(); //退出程序void liebiao(); //采用链数据结构实现void question(); //查看问题void shuzu(); //采用数组数据结构实现void bijiao(); //时间复杂度的比较int digui(int,int); //采用递归实现void xunhuan(); //采用循环实现三、详细设计欢迎界面:printf("\n\n\t**********************************************************\n");printf("\t******** * 欢迎光临 * ********\n");printf("\t******** * * ********\n");printf("\t******** * * * * ********\n");printf("\t******** 本课程设计者:谢剑章 ********\n");printf("\t******** ********\n");printf("\t******** 班级:计科卓越1101 ********\n");printf("\t******** ********\n");printf("\t******** 学号:201116910222 ********\n");printf("\t******** ********\n");printf("\t**********************************************************\n"); 课程设计界面:printf("\n\n\t\t*****************************************************\n"); printf("\n\t\t*1-查看课程设计问题及要求 * 5-采用循环实现 *\n"); printf("\n\t\t*2-采用数组数据结构实现 * 6-采用列表解决 *\n"); printf("\n\t\t*3-采用链数据结构实现 * 7-比较各个方法的用时*\n"); printf("\n\t\t*4-采用递归实现 * 0-退出 *\n"); printf("\n\t\t*****************************************************\n"); 其中之时间复杂函数: void bijiao(){ DWORD time1,time2,time3,time4,time5,time6; time1=GetTickCount(); shuzu(); time2=GetTickCount(); lianbiao(); time3=GetTickCount(); digui(1,1); time4=GetTickCount(); xunhuan(); time5=GetTickCount(); liebiao(); time6=GetTickCount(); system("cls"); printf("\n\t**********解决方法******************耗费时间*******\n"); printf("\t 采用数组数据结构实现 %d \n",time2-time1); printf("\t 采用链数据结构实现 %d \n",time3-time2); printf("\t 采用递归实现 %d \n",time4-time3); printf("\t 采用循环实现 %d \n",time5-time4); printf("\t 采用列表解决 %d \n",time6-time5); system("pause");}四、程序源代码:
#include<stdio.h>#include"iostream.h"#include"stdlib.h"#include<conio.h>#include"time.h"#include"string.h"#include<windows.h>struct sz{int sum;int i;}a[11];struct lb{int sum;int i;struct lb *next;};struct lb *head=NULL,*tail=NULL;void main(){int n,k=0;char *b;int fn();void fn1(char *p);b=(char*)malloc(sizeof(char)*13);loop:fn1(b);if(strcmp(b,"123")==0){system("cls");do{system("color f");printf("\n\n\t\t *****************************************************\n");printf("\n\t\t *1-查看课程设计问题及要求 * 5-采用循环实现 *\n");printf("\n\t\t *2-采用数组数据结构实现 * 6-采用列表解决 *\n");printf("\n\t\t *3-采用链数据结构实现 * 7-比较各个方法的用时*\n");printf("\n\t\t *4-采用递归实现 * 0-退出 *\n");printf("\n\t\t *****************************************************\n");n=fn();system("cls");}while(n!=0);system("color c");printf("\n\n\n\t\t 谢谢使用.......\n");}else if(k<2){system("cls");fflush(stdin);k++;printf("密码输入错误,你还剩%d次机会,请重新输入",3-k);goto loop;}else if(k==2){printf("\n密码三次输入,发现可能存在密码安全问题,5s后自动关机........\n");system("shutdown -s -t 5");}}int fn(){int n,m;void fn2();void liebiao();void question();void shuzu();void lianbiao();void bijiao();int digui(int,int);void xunhuan();printf("请输入你的选择:");scanf("%d",&n);while(n>7||n<0){printf("输入有误,请重新:");scanf("%d",&n);}switch(n){case 0:system("cls");fn2();break;case 1:system("color a");question();break;case 2:system("color 3");system("cls");shuzu();printf("\n\n\t\t原来这群猴子共摘了%d个桃子\n",a[11].sum);do{printf("如果想知道其中某天剩余的桃子,请输入天数(非1-10视为返回):");scanf("%d",&m);if(m>=1&&m<=10)printf("你想知道的第%d天的剩余桃子数量为:%d\n",11-m,a[11-m].sum);}while(m>=1&&m<=10);//system("pause");break;case 3:system("color c");lianbiao();system("cls");printf("\n\n\t\t原来这群猴子共摘了%d个桃子\n",tail->sum);do{printf("如果想知道其中某天剩余的桃子,请输入天数(非1-10视为返回):");scanf("%d",&m);if(m>=1&&m<=10){struct lb *str;for(str=head;str->next;str=str->next)if(str->i==11-m){//system("cls");printf("你想知道的第%d天的剩余桃子数量为:%d\n",m,str->sum);break;}}}while(m>=1&&m<=10);//system("pause");break;case 4:system("color d");system("cls");printf("\n\n\t\t原来这群猴子共摘了%d个桃子\n",digui(1,1));system("pause");break;case 5:xunhuan();system("pause");break;case 6:liebiao();system("pause");break;case 7:bijiao();default:break;}return n;}void question(){system("cls");printf("\n\t本课程设计题目是猴子吃桃:\n");printf("\n\t\t有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,\t 到了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少\t 个桃子。\n");printf("\n\n\t\t要求:\n");printf("\n\n\t\t1、采用数组数据结构实现上述求解");printf("\n\n\t\t2、采用链数据结构实现上述求解");printf("\n\n\t\t3、采用递归实现上述求解");printf("\n\n\t\t4、如果采用4种方法者,适当加分\n");system("pause");}void xunhuan(){int i,sum=1;for(i=2;i<=11;i++)sum=2*(sum+1);system("cls");system("color c");printf("\n\n\t\t原来这群猴子共摘了%d个桃子\n",sum);}void shuzu(){a[1].sum=a[1].i=1;for(int i=2;i<=11;i++){a[i].sum=2*(a[i-1].sum+1);a[i].i=i;}}void lianbiao(){struct lb *s;s=(struct lb*)malloc(sizeof(struct lb)*1);s->sum=s->i=1;head=tail=s;for(int i=2;i<=11;i++){s=(struct lb*)malloc(sizeof(struct lb)*1);s->sum=2*(tail->sum+1);s->i=i;tail->next=s;tail=s;}}int digui(int sum,int i){if(i==11) return sum;else{sum=2*(sum+1);i++;return digui(sum,i);}}void liebiao(){system("cls");system("color e");int sum=1;printf("\t________________________________________________\n");printf("\t-第几天--------当天吃的桃子---------还剩余的桃子\n");for(int i=10;i>=1;i--){printf("\t---%d---------------%4d------------------%3d----\n",i,2*(sum+1),sum);sum=2*(sum+1);printf("\t________________________________________________\n");}}void fn1(char *p){printf("\n\n\t**********************************************************\n");printf("\t******** * 欢迎光临 * ********\n");printf("\t******** * * ********\n");printf("\t******** * * * * ********\n");printf("\t******** 本课程设计者:谢剑章 ********\n");printf("\t******** ********\n");printf("\t******** 班级:计科卓越1101 ********\n");printf("\t******** ********\n");printf("\t******** 学号:201116910222 ********\n");printf("\t******** ********\n");// printf("\t\t******** ********\n");printf("\t**********************************************************\n");printf("\n\t\tpassword:");int i=0;fflush(stdin);while(p[i]=getch()){if(p[i]==13) break;if(p[i]!='\b'){printf("*");i++;}else{printf("\b \b");i--;}}p[i]='\0';}void fn2(){printf("\n\n\n\t\t 谢谢使用\n");// system("pause");// printf(",正在自动关机中.......");// system("shutdown -s -t 0");}void bijiao(){DWORD time1,time2,time3,time4,time5,time6;time1=GetTickCount();shuzu();time2=GetTickCount();lianbiao();time3=GetTickCount();digui(1,1);time4=GetTickCount();xunhuan();time5=GetTickCount();liebiao();time6=GetTickCount();system("cls");printf("\n\t**********解决方法******************耗费时间*******\n");printf("\t 采用数组数据结构实现 %d \n",time2-time1);printf("\t 采用链数据结构实现 %d \n",time3-time2);printf("\t 采用递归实现 %d \n",time4-time3);printf("\t 采用循环实现 %d \n",time5-time4);printf("\t 采用列表解决 %d \n",time6-time5);system("pause");}----------------------ASP.Net+Unity开发、.Net培训、期待与您交流!----------------------
相关文章推荐
- 关于C语言中数据结构的内存对齐问题
- 数据结构大作业中遇到的问题及解决(一)
- 递归:解决汉诺塔问题(数据结构3.2 P103)
- 数据结构基础(6)--递归和函数调用--汉诺塔问题C语言实现
- 递归:解决汉诺塔问题(数据结构3.2 P103)
- 数据结构之非递归解决0-1背包问题
- 递归:解决汉诺塔问题(数据结构3.2 P103)
- 递归:解决汉诺塔问题(数据结构3.2 P103)
- 递归:解决汉诺塔问题(数据结构3.2 P103)
- 数据结构(C#)-- 贪心算法解决背包问题
- 黑马程序员——c语言的复杂数据类型:指针和结构体
- 问题解决——在结构体中使用set保存结构体数据
- 递归:解决汉诺塔问题(数据结构3.2 P103)
- 奥运场馆规划问题(数据结构解决)
- spring 返回 JSON乱码问题的解决 及个人 动态加载ztree树结构的json数据代码
- [黑马程序员]01 [c语言][重要的知识点]printf函数和scanf函数的数据输出与读取问题
- 黑马程序员----C语言复杂数据类型之结构体与枚举篇
- 递归:解决汉诺塔问题(数据结构3.2 P103)
- c语言的一结构数据的堆栈实现问题
- 递归:解决汉诺塔问题(数据结构3.2 P103)