一维数组中求最大子数组的和
题目:
返回一个整数数组中最大子数组的和。
要求:
要求程序必须能处理1000 个元素;
每个元素是int32 类型的;
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。
(我主要负责程序分析,代码编程;张金负责代码复审,代码测试计划。)
#include<stdlib.h>#define AMOUNT 1000int main(){ long int arr[AMOUNT]; long int arrCopy[AMOUNT]; long int max[AMOUNT]; int i,j; int n; int start,rear; //子数组的开始,结束 int mount=AMOUNT; for(i=0;i<mount;i++) { try { n=rand()%2; if(n==0) { arr[i]=rand(); arrCopy[i]=arr[i]; max[i]=arr[i]; } else { arr[i]=-rand(); arrCopy[i]=arr[i]; max[i]=arr[i]; } } catch(long int e) { cout<<"Long Inter=ger Exception!"<<endl; } } cout<<"Array :"<<endl; for(i=0;i<mount;i++) { cout<<arr[i]<<" "; if((i+1)%10==0) { cout<<endl; } } for(j=0;j<mount-1;j++) { for(i=j+1;i<mount;i++) { try { arr[j]=arr[j]+arr[i]; if(max[j]<arr[j]) { max[j]=arr[j]; rear=i+1; } } catch(long int e) { cout<<"Long Inter=ger Exception!"<<endl; } } } for(i=0;i<mount;i++) { if(max[0]<max[i]) { max[0]=max[i]; start=i+1; } } cout<<endl; cout<<"从第"<<start<<"个数"<<arrCopy[start-1]<<"开始"<<endl; cout<<"到第"<<rear<<"个数"<<arrCopy[rear-1]<<"结束"<<endl; cout<<"子数组和的最大值为: "<<max[0]<<endl; return 0;} 总结:做起来比较吃力,不过有了一定的体会,日后把心思多放在学习上一些,希望我能较快进入状态。
浙公网安备 33010602011771号