• homework_01


    一. 程序的架构和思路:

      这段求解最大子数组之和的程序使用的主要思想是贪心算法,即每一步求出的都是当前的最优解。

      首先这道题要分两种情况来讨论:

      1)如果当前的输入中所有的数均为负数时,那么最后的解就是这个数列中最大的负数。

      2)第二种情况也是大多数情况,不是都为负数时,就要设置一个临时存储分段和的数sub_sun,然后一步步向后比较,只要sub_sum小于0,就舍弃它,舍弃然后向后重新寻找sub_sum.因为只要子分段和小于零,就一定会对后面的和值产生负影响,因此要舍弃。

    二. 写这个程序的心得:

      心得就是首先一定要看清题意,这是写一个好程序的基础。

      其次,在写程序前要多多思考,不要认为写出来了就可以了。只有努力的写出时间复杂度与空间复杂度都达到最好的程度时,才能算得上是一个好程序。

    三. 程序时间消耗与开发效率分析:

      写这个程序总共花费的时间是一小时,一次编译通过,没有调试。

      然后我在这个程序中为了算出时间,使用了clock函数来计算,但是由于我的测试数据都很小,如下所示,因此大部分的测试数据最后显示的时间都是0.0000s。这点做的还不够好,也是我的一个很大的遗憾。我想把时间显示为纳秒级别的,希望TA能够告诉我如何去实现,(不要显示0ns)谢谢了。

    四. 程序运行截图:

      程序截图:

      

    #include<stdio.h>
    #include<time.h>
    #include<stdlib.h>
    int main()
    {
    	int n;//输入个数
    	int a[10000];//存储数据
    	int i;//遍历
    	int sub_sum=0;//分段和
    	int maxsum=0;//记录最大分段和
    	clock_t start,finish;
    	while(scanf("%d",&n)!=EOF)
    	{
    		for(i=0;i<n;i++)
    			scanf("%d",&a[i]);
    		start=clock();//开始时间
    		maxsum=a[0];
    		sub_sum=a[0];
    		//找出最大分段和
    		for(i=1;i<n;i++)
    		{
    			if(sub_sum<0)
    				sub_sum=a[i];
    			else
    				sub_sum+=a[i];
    			if(maxsum<sub_sum)
    				maxsum=sub_sum;
    		}
                 finish=clock();//结束时间
    		printf("%f s
    ",(double)(finish-start)/CLOCKS_PER_SEC);//测量时间
    		printf("%d
    ",maxsum);//打印最大分段和
    	}
    	return 0;
    }

      

         

    五.我的教材用书

      代码大全(第二版)

    六.我的github帐号

      ehuaa

  • 相关阅读:
    Selenium-Xpath使用方法
    HTML基础之js
    HTML基础—DOM操作
    CSS基础知识总结二
    CSS基础知识总结之css样式引用的三种方式
    BZOJ 2329/2209 [HNOI2011]括号修复 (splay)
    BZOJ 1576 [USACO]安全路经Travel (树剖+线段树)
    BZOJ 2402 陶陶的难题II (01分数规划+树剖+线段树+凸包+二分)
    BZOJ 4044 Virus synthesis (回文自动机+dp)
    BZOJ 2342 [SHOI2011]双倍回文 (回文自动机)
  • 原文地址:https://www.cnblogs.com/Colin-Chai/p/3330317.html
Copyright © 2020-2023  润新知