3.1课堂练习

Posted renhao46707633

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3.1课堂练习相关的知识,希望对你有一定的参考价值。

题目:返回一个二维整数数组中最大子数组的和。

要求:

输入一个二维整型数组, 数组中有正数也有负数。

二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和。

求所有子数组的和的最大值。要求时间复杂度为o(n).

思维过程:二维数组求最大数组是从一维数组扩展而来,首先确定最大上下界的情况在第一行开始确定最大子数组范围,对于规定好的最大子数组的范围,把最大子数组按照一列有几个数,分成几种不同的行,对于以上产生的几个数组,进行一堆求子数组之和最大值的方法。

 1 #include<iostream>
 2 using namespace std;
 3 void main ()
 4 {
 5     int a,b,i,j,m=0,A[100][100];
 6  
 7     cout<<"输入矩阵的行和列";
 8     cin>>a>>b;
 9     if(a>100||b>100)
10     {
11         cout<<"请重新输入:";
12         cin>>a>>b;
13     }
14     for(i=0;i<a;i++)
15     {
16         for(j=0;j<b;j++)
17         {
18             cin>>A[i][j];
19         }
20  
21     }
22     int sum[100]={0},max=0,result=A[0][0];
23  
24     for(i=0;i<a;i++)
25     {
26         while(m+i<a)
27         {
28             for(j=0;j<b;j++)
29             {
30                 sum[j]=sum[j]+A[m+i][j];
31  
32             }
33             max=0;
34             for(j=0;j<b;j++)
35             {
36                 if(max+sum[j]>sum[j])
37                 {
38                     max=max+sum[j];
39                 }
40                 else
41                 {
42                     max=sum[j];
43                 }
44                 if(max>result)
45                 {
46                     result=max;
47                 }
48             }
49             m++;
50         }
51         m=0;
52         for(j=0;j<b;j++)
53         {
54             sum[j]=0;
55         }
56  
57     }
58  
59     cout<<result;
60 }

技术分享图片感悟

:每次的输入代码都是一次学习的过程,只有做了才会发现问题。

 

以上是关于3.1课堂练习的主要内容,如果未能解决你的问题,请参考以下文章

关于本次课堂代码的练习

课堂练习--找水王

课堂练习四

课堂练习-找水王

课堂练习

课堂练习(水王扩展)