返回一个整数数组中最大子数组的和
要求:
输入一个整形数组,数组中有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
如果数组A[0]。。。A[i-1]首尾相连,允许A[i-1],。。。A[n-1],A[0].....A[i-1]之和最大/
同时返回最大子数组的位置
求所有子数组的和的最大值
代码
#include<iostream>
#define n 100
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;
cout << "最大子数组中元素的下标位子置:" << endl;
i = 0;
while (i <= q)
{
cout << p << " ";
p++;
if (p >= length)
{
p = 0;
}
i++;
}
cout << endl;
}
思路
首先将数组顺序进行一维数组的方法找最大子数组的和,然后倒序进行一维数组的最大子数组的和。
两次找到的最大子数组和进行链接。
结果
无
人员。一人 赵承龙
照片 马赛克
浙公网安备 33010602011771号