首页 > 编程语言 > 详细

求二维整型数组的所有子数组的和的最大子数组

时间:2018-10-21 19:15:31      阅读:134      评论:0      收藏:0      [点我收藏+]
本次作业是关于二维整型数组的最大子数组的求解,相比第一次的一维数组来说,确实难了些。经过我们的苦思冥想,想了很多设计思路,但是都是存在着很多问题;在没有别的好的方法选择之后,我们只能选择了最基本的:枚举法进行求解。设计思路:
    1.确定二维数组的所有子数组的数量,并用一个一维整型数组sum[]存储;
    2.从第一个元素开始,以第一个元素为子数组的起始元素,将整个数组遍历,每得到一个二维子数组,就存储到sum[]中;然后以第二个元素为开始;依此类推,直到最后一个元素结束。
    3.然后求出sum[]数组中的最大元素,则该元素就是最大的子数组和。
    程序代码:
 1 #include<iostream>
 2 using namespace std;
 3 
 4 int main()
 5 {
 6     int m,n;
 7     cout << "请输入二维数组的行和列:";
 8     cin >> n>> m;
 9     //定义一个可变长二维数组;
10     int** a;
11     a = new int*[n];
12     for (int i = 0; i <= n; i++)
13     {
14         a[i] = new int[m];
15     }
16     //定义一个存储二维数组所有子数组的可变长一维数组;
17     int *sum=new int [m*(m+1)*n*(n+1)/4];
18     for (int i = 0; i < m*(m + 1)*n*(n + 1) / 4; i++)
19     {
20         sum[i] = 0;
21     }
22     int t = 0;
23     cout << "输入数组的值:" << endl;
24     for (int i = 0; i < n; i++)
25     {
26         for (int j = 0; j < m; j++)
27         {
28             cin >> a[i][j];
29         }
30     }
31     //用枚举法将所有子数组的和求出,放到sum数组里;
32     for (int i = 0; i < n; i++)
33     {
34         for (int j = 0; j < m; j++)
35         {
36             for (int p = i; p < n; p++)
37             {
38                 for (int q = j; q < m; q++)
39                 {
40                     for (int y = i; y <= p; y++)
41                     {
42                         for (int x = j; x <= q; x++)
43                         {
44                             //求子数组和;
45                             sum[t] = sum[t] + a[y][x];
46                         }
47                     }
48                     t++;
49                 }
50             }
51         }
52     }
53     //求最大子数组;
54     for (int i = 0; i < m*(m + 1)*n*(n + 1) / 4; i++)
55     {
56         if (sum[0] < sum[i])
57         {
58             sum[0] = sum[i];
59         }
60     }
61     cout<< "最大子数组的和为:"<<sum[0] << endl;
62     system("pause");
63     return 0;
64 }

测试截图:

技术分享图片

技术分享图片

技术分享图片

 

小组成员:

 技术分享图片

 

求二维整型数组的所有子数组的和的最大子数组

原文:https://www.cnblogs.com/huangrb/p/9826077.html

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