返回一个二维整数数组的最大子数组
#include<iostream>
using namespace std;
int Max(int n, int a[], int *smark, int *mmark)
{
int b[100] = { 0 };
int i, sum1 = 0, max1 = 0;
for (i = 0; i<n; i++)
{
if (sum1<0)
{
sum1 = a[i];
}
else
{
sum1 = sum1 + a[i];
}
b[i] = sum1;
}
max1 = b[0];
for (i = 0; i<n; i++)
{
if (max1<b[i])
{
max1 = b[i];
*mmark = i;
}
}
for (i = *mmark; i >= 0; i--)
{
if (b[i] == a[i])
{
*smark = i;
break;
}
}
return max1;
}
void main()
{
int m, n, i, j, smark, mmark, t2;
int sum, max;
int up[100], down[100], t[100];
int a[100][100], b[100];
cout << "输入二维数组的行和列";
cin >> m >> n;
for (i = 0; i<m; i++)
{
for (j = 0; j<n; j++)
{
cin >> a[i][j];
}
}
for (i = 0; i<m; i++)
{
for (j = 0; j<n; j++)
{
b[j] = a[i][j];
}
sum = Max(n, b, &smark, &mmark);
up[i] = smark;
down[i] = mmark;
t[i] = sum;
}
t2 = t[0];
for (i = 0; i + 1<m; i++)
{
if (up[i] <= down[i + 1] && down[i] >= up[i + 1])
{
t2 += t[i + 1];
}
for (j = up[i]; j<up[i + 1]; j++)
{
if (a[i + 1][j]>0) t2 += a[i + 1][j]; //判别独立正数
}
}
cout << t2 << endl;
}

浙公网安备 33010602011771号