题目:求一个数组中子数组和最大的数组,并返回子数组中是由哪几个数组元素构成
<1>首先我们组进行这个程序应该怎么实现的讨论,认为在一个数组中要想找到子数组和最大的数组,我们需要求出相邻数组的和然后进行比较找到最大的。
<2>以数组【4,5,-3,-2,0】为例,先以第一个数为节点,然后进行第一个数与第二个数相加,如果和大于第一个节点,我们更改和的值,并把开始数组下标保存都first变量中,结束数组下标保存到final变量中,后面的依次类推.;在以第一个数为节点的情况都找完以后,我们开始以第二个数为节点,以后依次类推。通过这种方式我们就可以找到所有子数组的和并进行比较,把数组和最大的数放入sum。
<3>开始的我们组编的代码有一些不足,代码如下
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]; } }
其中我们没有考虑第一个数组为最大值,后经代码复审,更改了上述问题,代码如下
#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); return 0; }