一。
在主函数中实现二维数组的输入、
代码主要函数maxson(),主要利用for()循环先查找出最大字数组的四角的坐标xmin,xmax,ymin,ymax来确定最大子数组,
在循环中算出之和,编写过程中行列的值赋值错误,但经过调试查找出来了;后来在输出最大子数组的地方遇到麻烦,
考虑不周全用普遍的 if(j%n==0)cout<<endl;来进行换行,导致出现错误,应改为if(j%n==m),m为最大子数组的第一列,
源代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81 |
#include <iostream> using
namespace std; int a[100][100]; int maxson( int
M, int N) { int
xmin,xmax,ymin,ymax; int
m,n,p,q,t; int
i,j,max=a[0][0],sum=0; for (xmin=0;xmin<M;xmin++) for (xmax=xmin+1;xmax<=M;xmax++) for (ymin=0;ymin<N;ymin++) for (ymax=ymin+1;ymax<=M;ymax++) { sum=0; for (j=xmin;j<xmax;j++) for (i=ymin;i<ymax;i++) { sum=a[i][j]+sum; } if (max<sum) { max=sum; m=xmin; n=xmax; p=ymin; q=ymax; } } cout<< "最大子数组为" <<endl; t=n-m; for (i=p;i<q;i++) for (j=m;j<n;j++) { if (j%t==m) cout<<endl; cout<<a[i][j]<< ‘\t‘ ; } cout<<endl; return
max; } void
main() { int
M=0,N=0,i,j; while (!M) //检查输入的M,N否则重新输 { cout<< "数组的行数: " ; cin>>M; if (M<=0) { M=0; cout<< "行数必须大于0" <<endl; } } while (!N) { cout<< "数组的列数: " ; cin>>N; if (N<=0) { cout<< "列数必须大于0" <<endl; N=0; } cout<< "输入数组的值:" ; //输入二维数组的值 for (i=0;i<M;i++) for (j=0;j<N;j++) { cin>>a[i][j]; } } cout<< "您输入的数组为:"
; //输出数组 for (i=0;i<M;i++) for (j=0;j<N;j++) { if (j%N==0) cout<<endl; cout<<a[i][j]<< ‘\t‘ ; } cout<<endl; cout<< "子数组和为:" <<maxson(M,N)<<endl; } |
2.运行结果
[软件工程] 查找二维数组最大子数组的之和 郭莉莉&李亚文,布布扣,bubuko.com
原文:http://www.cnblogs.com/liyawen/p/3611890.html