我是靠谱客的博主 现实中心,最近开发中收集的这篇文章主要介绍黑马程序员--C语言之数据结构解决问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述


  ----------------------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("nnt**********************************************************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("nntt*****************************************************n");

       printf("ntt*1-查看课程设计问题及要求  *   5-采用循环实现      *n");

       printf("ntt*2-采用数组数据结构实现     *  6-采用列表解决      *n");

       printf("ntt*3-采用链数据结构实现       *  7-比较各个方法的用时*n");

       printf("ntt*4-采用递归实现             *  0-退出              *n");

       printf("ntt*****************************************************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("nt**********解决方法******************耗费时间*******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("nntt *****************************************************n");
    	printf("ntt *1-查看课程设计问题及要求   *   5-采用循环实现      *n");
    	printf("ntt *2-采用数组数据结构实现     *   6-采用列表解决      *n");
    	printf("ntt *3-采用链数据结构实现       *   7-比较各个方法的用时*n");
    	printf("ntt *4-采用递归实现             *   0-退出              *n"); 
		printf("ntt *****************************************************n");
	    n=fn();
		system("cls");
	}while(n!=0);
	system("color c");
	printf("nnntt     谢谢使用.......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("nntt原来这群猴子共摘了%d个桃子n",a[11].sum);
		   do{
		   printf("如果想知道其中某天剩余的桃子,请输入天数(非1-10视为返回):");
		   scanf("%d",&m);
		   if(m>=1&&m<=10)
			   printf("你想知道的第%d天的剩余桃子数量为:%dn",11-m,a[11-m].sum);
		   }while(m>=1&&m<=10);
		   //system("pause");
		   break;
	   case 3:
		   system("color c");
		   lianbiao();
		   system("cls");
		   printf("nntt原来这群猴子共摘了%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天的剩余桃子数量为:%dn",m,str->sum);
					   break;
				   }
		   }
		   }while(m>=1&&m<=10);
		   //system("pause");
		   break;
	   case 4:
		   system("color d");
		   system("cls");
		   printf("nntt原来这群猴子共摘了%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("nt本课程设计题目是猴子吃桃:n");
	printf("ntt有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,t    到了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少t    个桃子。n");
	printf("nntt要求:n");
	printf("nntt1、采用数组数据结构实现上述求解");
    printf("nntt2、采用链数据结构实现上述求解");
	printf("nntt3、采用递归实现上述求解");
	printf("nntt4、如果采用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("nntt原来这群猴子共摘了%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("nnt**********************************************************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("tt********                                          ********n");
	printf("t**********************************************************n"); 
    printf("nttpassword:");
	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]='';
}
void fn2()
{
	printf("nnntt     谢谢使用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("nt**********解决方法******************耗费时间*******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语言之数据结构解决问题的全部内容,希望文章能够帮你解决黑马程序员--C语言之数据结构解决问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部