标签:
一、题目与要求
题目、返回一个二维整数数组中最大子数组的和
要求、1、输入一个二维整形数组,数组里有正数也有负数。
3、数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和
二、设计思路
在上一次的以为循环数组的基础上,和二维数组求最大子数组相结合,将功能合并,完成题目要求。
如:原二维数组
1 | 2 |
3 | 4 |
每行求和后、
1 | 1+2 | 2 | 2+1 |
3 | 3+4 | 4 | 4+3 |
逐列求和、
1 | 1+2 | 2 | 2+1 |
1+3 | 1+2+3+4 | 2+4 | 2+1+4+3 |
3 | 3+4 | 4 | 4+3 |
这样就求出了所有子矩阵的和,然后比较大小就可以了
三、源代码
1 // ketang5.cpp : 定义控制台应用程序的入口点。 2 //张世通 梁世豪 3 4 #include "stdafx.h" 5 #include "iostream" 6 using namespace std; 7 8 /*二维数组压缩函数*/ 9 void yasuo(int **Source,int **Destion,int row,int line) 10 {//将每一行的数组元素都用枚举法求出子数组 11 int i,j,add,count; 12 for(i=0;i<row;i++) 13 { 14 count=0; 15 for(j=0;j<line;j++) 16 { 17 add=0; 18 for(int l=0;l<line;l++) //每一行按顺序进行枚举存入数组中 19 { 20 add=add+Source[i][l+j]; 21 Destion[i][count+l]=add; 22 } 23 count=count+line; 24 Source[i][line+j]=Source[i][j]; 25 } 26 } 27 } 28 29 /*求最大值函数*/ 30 int Max(int **Destion,int row,int line) 31 { 32 int i,j,add,max; 33 max=Destion[0][0]; //将数组的第一个数赋值给max 34 for(j=0;j<line;j++) 35 { 36 for(i=0;i<row;i++) 37 { 38 add=0; 39 for(int r=0;r<row-i;r++) 40 { 41 add=add+Destion[r+i][j]; //逐列对数组进行枚举,求最大值 42 if(max<add) 43 { 44 max=add; 45 } 46 } 47 } 48 } 49 return max; 50 } 51 52 /*数组初始化*/ 53 void chushihua(int**Arr,int row,int line) 54 { 55 cout<<"请输入数组数据"<<endl; 56 for(int i=0;i<row;i++) 57 { 58 for(int j=0;j<line;j++) 59 { 60 cin>>Arr[i][j]; 61 } 62 } 63 } 64 65 int main() 66 { 67 char s; 68 int row,col1,col2; //定义行数列数 69 cout<<"请输入行数:"; 70 cin>>row; 71 cout<<"请输入列数:"; 72 cin>>col1; 73 int **A; //动态定义二维数组 74 int **B; 75 col2=col1*col1; 76 A=new int*[row]; 77 for(int k=0;k<row;k++) 78 { 79 A[k]=new int[col1]; 80 } 81 B=new int*[row]; 82 for(int l=0;l<row;l++) 83 { 84 B[l]=new int[col2]; 85 } 86 chushihua(A,row,col1); 87 yasuo(A,B,row,col1); 88 int max=Max(B,row,col2); 89 cout<<"最大子数组之和为:"<<max<<endl; 90 cout<<endl; 91 cout<<"是否继续(Y/N)"; 92 cin>>s; 93 while(s!=‘Y‘&&s!=‘y‘&&s!=‘N‘&&s!=‘n‘) 94 { 95 cout<<"输入错误,请重新输入(Y/N)"; 96 cin>>s; 97 } 98 if(s==‘Y‘||s==‘y‘) 99 { 100 main(); 101 } 102 return 0; 103 }
四.运行截图
五.总结体会
1.这是我和世通在软工结对开发的最后一次合作,他一直以很积极态度来促进我们之间的合作,想法很多也都很有用,总之他是一个优秀的合作伙伴,以后有机会我还想和他一起进步。
2.我们这次的程序基本上是沿用了之前的基本思想,有了前几次的经验,感觉这次的程序的思路就像顺水推舟一般出现在脑海中,然后的实现也比较顺利。
六.合影
标签:
原文地址:http://www.cnblogs.com/zglsh/p/4388191.html