返回一个整数数组中最大子数组的和
源代码
#include<iostream>
#define n 1000
using namespace std;
void main()
{
int a[n], b[n][n]; int length, i, j, w = 0, p = 0, q = 0, temp, m;
cout << "输入随机整数" << endl;
for (length = 0;;)
{
cin >> a[length];
length++;
if (getchar() == '\n')
{
break; } } cout << "这个数组的长度为:" << length << endl;
for (i = 0; i<length; i++)
{
m = i;
w = 0;
j = 0;
while (j <= length - 1)
{
w += a[m];
b[i][j] = w;
m++;
if (m>length - 1)
{
m = 0;
}
j++;
}
}
temp = b[0][0];
for (i = 0; i<length; i++)
{
for (j = 0; j<length; j++)
{
if (b[i][j]>temp)
{
temp = b[i][j];
p = i;
q = j;
}
}
}
cout << "最大子数组的值为:" << temp << endl;
i = 0;
while (i <= q)
{
cout << p << " ";
p++;
if (p >= length)
{
p = 0;
}
i++;
}
cout << endl;
}
运行结果截图
总结
本次的课堂作业是返回一个整数组中最大子数组的和,首先从题目上来讲不算太难,无非取一些相同类型的若干元素按无序的形式组织起来,求其和,然后再进行比较。因此从网上和书上找到了一个模板,再根据以下要求对代码进行补充。
1)要求程序必须能处理1000个元素,只需在代码的开头预编译命令中定义1000个字符;2)每个元素是int32类型的,出现子数组之和大于整型就表示的最大范围会出现什么情况。这个要求前部分可以理解,无非是整型数32位,但后半部分不能很好的理解,也没有找到相应的模板,因此这个要求也就就此搁浅了,等看到正确答案后再做补充。3)输入一个整形数组,数组里有正数也有负数。4)数组中连续一个或多个整数组成一个子数组,每个子数组都有一个和。即是随机输入的一个或多个整数中,从前往后每一个整数都与其之前的所有整数组成一个子数组,并计算出该子数组的和。5)求所有子数组的和的最大值,要求时间复杂度为O(n)。将所有子数组的和计算出来之后进行比较,得出其中最大值即为程序最后所需得到的结果。
合影