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

mac2022-06-30  232

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

举例:

有一数组: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\n",first,last,max); //printf("Hello World!\n"); 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]; } }

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

转载于:https://www.cnblogs.com/renguoqing/p/3591887.html


最新回复(0)