一。
在主函数中实现二维数组的输入、
代码主要函数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
82 |
#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/guolili/p/3611863.html