标签:
结对成员:范德一 赵永恒
一.题目与要求
题目、返回一个二维整数数组中最大子数组的和
要求、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