首页 > 其他 > 详细

[软件工程] 查找二维数组最大子数组的之和 郭莉莉&李亚文

时间:2014-03-19 22:59:51      阅读:388      评论:0      收藏:0      [点我收藏+]

一。

在主函数中实现二维数组的输入、

代码主要函数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,布布扣

[软件工程] 查找二维数组最大子数组的之和 郭莉莉&李亚文,布布扣,bubuko.com

[软件工程] 查找二维数组最大子数组的之和 郭莉莉&李亚文

原文:http://www.cnblogs.com/liyawen/p/3611890.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!