环形二维数组求最大子矩阵

1.设计思路

结合环一位数组的开发经验,拓展到二维。与前者主要是时间复杂度没有做处理。

2.源代码

  1 //作者:王炳午、董龙洋。日期:2015.3.24.
  2 #include <iostream>
  3 #include<stdlib.h>
  4 #include<time.h>
  5 using namespace std;
  6 int maxMax(int amax[])     //求最大
  7 {
  8     int i;
  9     int sum = 0;
 10     int max;
 11     int max_max;
 12     max = 0;
 13     max_max = 0;
 14     for (i = 0; i < 9; i++)
 15     {
 16         max += amax[i];
 17         if (max < 0)
 18             max = 0;
 19         if (max != 0)
 20         {
 21             sum++;
 22             if (sum >= 5)
 23                 max = 0;
 24             if (max > max_max)
 25                 max_max = max;
 26         }
 27         else
 28         {
 29             sum = 0;
 30             if (sum >= 5)
 31                 max = 0;
 32             if (max > max_max)
 33                 max_max = max;
 34         }
 35     }
 36     if (max_max == 0)
 37     {
 38         for (int i = 0; i < 9; i++)
 39         {
 40             if (max_max == 0)
 41             {
 42                 max_max = amax[i];
 43             }
 44             else
 45             {
 46                 if (max_max < amax[i])
 47                 {
 48                     max_max = amax[i];
 49                 }
 50             }
 51         }
 52     }
 53     return max_max;
 54 }
 55 
 56 int main()
 57 {
 58     int a[3][5];
 59     int b[3][9];      //合并后的数组;
 60     int i;
 61     int j;
 62     int sum = 0;
 63     int overmax;
 64     int max;
 65     int max_max;
 66     int bmax[100];
 67     int amax[100];
 68     cout << "---------------------求数组中子数组和的最大值的小程序----------------------" << endl;
 69     cout << endl;
 70     cout << "得到的二维随机整数数组(3行5列)如下:" << endl;
 71     srand((unsigned)time(NULL));//随机数种子为当前计算机时间。
 72 
 73     for (i = 0; i < 3; i++)      //输入数组中的每个元素
 74         for (j = 0; j < 5; j++)
 75             a[i][j] = (rand() % 21 - 10);
 76     for (i = 0; i < 3; i++)
 77         for (j = 0; j < 9; j++)
 78         {
 79             if (j >= 0 && j <= 4)
 80                 b[i][j] = a[i][j];
 81             else
 82                 b[i][j] = a[i][j - 5];
 83         }
 84 
 85     for (i = 0; i < 3; i++)        //每行数据比较;
 86     {
 87         max = 0;
 88         max_max = 0;
 89         for (j = 0; j < 9; j++)
 90         {
 91             max += b[i][j];
 92             if (max < 0)
 93                 max = 0;
 94             /*if (max != 0)
 95             {
 96             sum = 0;
 97             sum++;
 98             }
 99             if (sum >= 5)
100             max = 0;
101             if (max > max_max)
102             max_max = max;*/
103             if (max != 0)
104             {
105                 sum++;
106                 if (sum >= 5)
107                     max = 0;
108                 if (max > max_max)
109                     max_max = max;
110             }
111             else
112             {
113                 sum = 0;
114                 if (sum >= 5)
115                     max = 0;
116                 if (max > max_max)
117                     max_max = max;
118             }
119         }
120         if (max_max == 0)
121         {
122             max_max = b[0][0];
123             for (j = 0; j < 9; j++)
124             {
125                 if (max_max < b[i][j])
126                     max_max = b[i][j];
127             }
128         }
129         bmax[i] = max_max;           //0到2
130     }
131     for (j = 0; j < 9; j++)        //上中组合两两组合保存在amax数组
132     {
133 
134         amax[j] = b[0][j] + b[1][j];
135 
136     }
137     bmax[3] = maxMax(amax);
138 
139     for (j = 0; j < 9; j++)        //中下组合两两组合保存在amax数组
140     {
141 
142         amax[j] = b[1][j] + b[2][j];
143 
144     }
145     bmax[4] = maxMax(amax);
146 
147     for (j = 0; j < 9; j++)        //上中下组合两两组合保存在amax数组
148     {
149 
150         amax[j] = b[1][j] + b[2][j] + b[0][j];
151 
152     }
153     bmax[5] = maxMax(amax);
154 
155 
156 
157 
158 
159     for (i = 0; i < 3; i++)     //输出数组中每个元素
160         for (j = 0; j < 5; j++)
161         {
162             cout << a[i][j] << "\t";
163             if ((j + 1) % 5 == 0)
164             {
165                 cout << endl;
166             }
167         }
168     //求二维数组子矩阵最大值。
169     overmax = bmax[0];
170     for (i = 0; i < 6; i++)
171     {
172         if (overmax < bmax[i])
173         {
174             overmax = bmax[i];
175         }
176     }
177     cout << "子矩阵和最大值为:" << overmax << endl;
178     /*    for(i=0;i<6;i++)
179     {
180     cout<<bmax[i]<<"\t";
181     }*/
182     return 0;
183 }
3.运行结果

4.实验心得

本次开发过程主要有队友编写代码,我从旁协助。大家互换角色,锻炼了能力,有了结对开发的经验。

 

转载于:https://www.cnblogs.com/dlyxx/p/4396497.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值