标签:
结对成员:范德一 赵永恒
一.题目与要求
题目、返回一个二维整数数组中最大子数组的和
要求、1、输入一个二维整形数组,数组里有正数也有负数。
3、数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和
二.设计思路
在上一次的以为循环数组的基础上,和二维数组求最大子数组相结合,将功能合并,完成题目要求。
三.源代码
//
#include "stdafx.h"
#include "iostream"
#include <vector>
using namespace std;
const int N = 101;
int a[N][N], p[N][N],b[N][N];
int MaxRecSum(int n)
{
for (int i = 0; i <= n; ++i)
{
p[i][0] = 0;
p[0][i] = 0;
}
for (int i = 1; i <= n; ++i)
{
for (int j = 1; j <= n; ++j)
p[i][j] = p[i-1][j] + p[i][j-1] - p[i-1][j-1] +a[i][j];
}
int max = INT_MIN;
for (int i = 1; i <= n; ++i)
{
for (int j = i; j <= n; ++j)
{
int sum = 0;
for (int k = 1; k <= n; ++k)
{
int temp = p[j][k] - p[j][k-1] - p[i-1][k] + p[i-1][k-1];
if (sum > 0)
sum += temp;
else
sum = temp;
if (sum > max)
max = sum;
}
}
}
return max;
}
int main()
{
int n = 3;
int num;
cout<<"矩阵的规格为三行三列,请输入数值:"<<endl;
for (int i = 1; i <= n; ++i)
{
for (int j = 1; j <= n; ++j)
{
cin >> num;
a[i][j] = num;
}
}
int b[3][6];
for(int t=0;t<3;t++)
{
b[t][0]=a[t][0];
b[t][1]=a[t][1];
b[t][2]=a[t][2];
b[t][3]=b[t][0];
b[t][4]=b[t][1];
b[t][5]=b[t][2];
}
cout <<"最大矩阵的和为:"<< MaxRecSum(n) << endl;
for (int i = 1; i <= n; ++i)
{
for (int j = 1; j <= n; ++j)
{
cout <<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
四.运行截图


五.实验感想
这次实验的实现,时间有一点紧凑,所以功能方面还有许多不足的地方,程序的优化也足够的改善,相信有更多的时间的话,我们能做得更好。
六.结对成员合照

标签:
原文地址:http://www.cnblogs.com/myblog1993/p/4388671.html