1. 程式人生 > >返回一個二維陣列中最大子陣列的和

返回一個二維陣列中最大子陣列的和

題目:返回一個二維整數陣列中最大子陣列的和。
要求:
輸入一個二維整形陣列,數組裡有正數也有負數。
二維陣列中連續的一個子矩陣組成一個子陣列,每個子陣列都有一個和。
求所有子陣列的和的最大值。

思路:先求每一行一維陣列所有子陣列的和的最大值,再與下面的其他行的最大值進行比較,看是否能重新生成一個新的陣列,如果能,返回這個陣列的和,如果不行,返回一維陣列的和或求其他剩餘子陣列的最大值。為了方便起見,這裡用3×3的陣列。

程式程式碼:


#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"

int _tmain(int argc, _TCHAR* argv[])
{
int x[3][3] = {0};
int sum = 0;
int max = 0;
int i = 0;
int j = 0;
//賦值
for (i = 0; i<3; i++)
{
for (j = 0; j<3;j++)
{
x[i][j] = rand()%20-10;
printf("%d\t",x[i][j] );
}
}
//迴圈
int M = x[0][0];
for (i = 0; i<3; i++)
{
int y = i;
do
{
for (j = 0; j<3; j++)
{
for (int u = i; u >= y; u--)
{
sum = sum + x[j][u];
}
max = max + sum;
if (max >= M)
{
M =max;
}
if (max<0)
{
max = 0;
}
sum = 0;
}
y--;
max = 0;
} while (y >= 0);
}
printf("\n連續最大子陣列之和:");
printf("%d\n", M);
return 0;
}  執行成果圖:
在一起程式設計的照片: