返回整数数组中最大子数组的和2
1.题目:
返回一个整数数组中最大子数组的和。
2.要求:
1)要求程序必须能处理1000个元素;
2)每个元素都是int32类型的。
3.设计思路:
处理1000个元素时让用户自己输入想要的数组长度,看看运行时出处理时间的长短,再在源程序中改善这一问题。
处理大数溢出时,由于随机函数生成的数不算太大,我们尽量让其最终存入数组的元素接近最大范围,进而求和时才可能出现大数溢出的情况。
4.源代码:
1 #include<iostream>
2 #include<stdlib.h>
3 using namespace std;
4 #include <ctime>
5 #include <cstdlib>
6 #define MAX 100000
7 int main()
8 {
9 int k,t=0,o=0;
10 int n=0,m=0;
11 int b[MAX];
12 int a[MAX];
13 cout<<"请输入数组中整数的个数:"<<endl;
14 cin>>k;
15 srand(time(0));
16 for(int i=0;i<k;i++)
17 {
18 a[i]=rand()%100-50;
19 cout<<a[i]<<" ";
20 // cin>>a[i];
21 }
22
23 for(int l=1;l<k+1;l++)
24 {
25 for(i=0;i<k-l+1;i++)
26 {
27 for(int j=i;j<i+l;j++)
28 {
29 if(j>k-1)
30 {
31 break;
32 }
33 else
34 m=m+a[j];
35 }
36 b[n]=m;
37 m=0;
38 n=n+1;
39 }
40 }
41 int max=b[0];
42 for(i=1;i<n;i++)
43 {
44 if(max<b[i])
45 max=b[i];
46 }
47 /* for(i=0;i<n;i++)
48 {
49 if(max==b[i])
50 {
51 m=i;
52 }
53 }
54 m=m+1;
55 int r=k;
56 for(int j=0;j<k;j++)
57 {
58 if(m>=r&&r>=0)
59 {
60 m=m-r;
61 t=t+1;
62 r=r-1;
63 }
64 if(m==0&&r>0&&j!=k-1)
65 {
66 m=m+r+1;
67 break;
68 }
69 if(m==0&&r==0&&t==k)
70 {
71 m=m+1;
72 break;
73 }
74 }*/
75 cout<<endl;
76 cout<<"该数组中的最大子数组的和为:"<<max<<endl;
77 /*cout<<"这些数字为:";
78 m=m-1;
79 if(t==0)
80 {
81 t=1;
82 }
83 for(i=m;i<m+t;i++)
84 {
85 cout<<a[i]<<" ";
86 }
87 for(i=0;i<n;i++)
88 cout<<b[i]<<" ";*/
89 return 0;
90 }
5.结果截图: