题目:返回一个整数数组中最大字数组的和
要求:程序必须能够处理1000个元素
数组中元素有正有负
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和
求所有子数组的和的最大值。
#include <iostream> #include <cstdlib> #include <ctime> using namespace std; void main() { int a[1000],b,c,d=0,i,j,k,t=-10000,o=-10000,n,m; cout<<"请输入数值范围:"<<endl; cin>>b>>c; cout<<"数组元素为:"<<endl; srand(unsigned(time(0))); for (i=0;i<1000;i++) { a[i]=rand()%(c-b+1)+b; cout<<a[i]<<" "; } for (i=0;i<1000;i++) { for (j=i;j<1000;j++) { d=0; for (k=i;k<=j;k++) { d=d+a[k]; } if (d>t) {t=d;n=i;m=j;} } if (t>o) o=t; } cout<<endl<<"最大子数组的和:"<<endl; for (i=n;i<=m;i++) { if (a[i]>=0) { cout<<a[i]; } else cout<<"("<<a[i]<<")"; if (i!=m) cout<<"+"; else cout<<"="; } cout<<o<<endl; }
运行结果如图:
总结:本次主要出现的问题就是最开始的数组没有负数,后来在网上查询了一下怎样能够让其有负数,并对其修改且符合老师要求。