• 【软件工程】解决求数组的子数组最大和问题


    问题描述:求一个数组的子数组的最大和,并且标出数组的具体取值问。

    举例:

    有一数组:arr[5]={-4,5,6,-2,9},则它的子数组的和最大值为arr[2]到arr[3]的和。

    编程语言:c语言

    程序代码:

    // 20140310.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    
    int main(int argc, char* argv[])
    {
        int arr[100],sum,k;
        int max,first,last;
        printf("请输入数组的数字个数:");
        scanf("%d",&k);
        printf("请输入数组的内容:");
        for(int i=0;i<k;i++)
        {
            scanf("%d",&arr[i]);
        }
    
        sum=max=arr[0];
    
        for(int j=0;j<k;j++)
        {
            sum=arr[j];
            for(i=j;i<k;i++)
            {
            
                if(i!=j)
                {
                    sum=sum+arr[i];
                    if(sum>max)
                    {
                        max=sum;
                        first=j;
                        last=i;
                    }
                }
                else
                {
                    if(arr[i]>max)
                    {
                        max=arr[i];
                        first=j;
                        last=i;
                    }
                }
            }
        }
    
        printf("数组arr[%d]-arr[%d]的和最大,最大值为:%d
    ",first,last,max);
    
        //printf("Hello World!
    ");
        return 0;
    }

    运行实例:

    这个的程序代码为课上老师作为结对开发的例子。两个人一起写程序,两者分别作为写代码和监督逻辑思维代码规范。

    这次是我&张博两个人的结对开发。开始阶段我们讨论了这个程序的实现原理,等到我们有具体思路后,我们开始讨论实现的细节。开始本来想使用一个结构体来存储每次计算的和,但是程序是需要最大值,我们就舍去,采取的最简单的max值的方法。经过多次的修改,我们最后完成了程序。

    开始的代码:

    for(int j=0;j<k;j++)
        {
            for(i=j+1;i<k;i++)
            {
            
                if(i!=j)
                {
                    sum=arr[j]+arr[i];
                    if(sum>max)
                    {
                        max=sum;
                        first=j;
                        last=i;
                    }
                }
                //sum=arr[j];
            }
        }

    可以看出上面的代码,没有考虑到单个数组值的情况,在这样的情况下,如果最后一个数组值是最大值,那么程序就会报错,得不到正确结果。在程序复审的阶段,我们一起讨论了这个问题。

  • 相关阅读:
    网线
    第19次实验
    矩阵乘法
    20次试验
    视频笔记
    1
    effective C++ 条款 34:区分接口继承和实现继承
    effective C++ 条款 35:考虑virtual函数以外的其他选择
    effective C++ 条款 29:为“异常安全”而努力是值得的
    effective C++ 条款 27:尽量少做转型动作
  • 原文地址:https://www.cnblogs.com/renguoqing/p/3591887.html
Copyright © 2020-2023  润新知