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

先上代码:

  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 }

结果:

本次试验有些仓促,两人的时间都有点少,本次我充当的是代码书写员,我和我的小伙伴轮流替换角色,都收获了很多,

觉得两人结对,会使发现错误的几率大大增加,特别是一些算法上的问题,对代码的完成速度和质量都有很大的好处。

以下是我和小伙伴的合照(左边是我,右边是我的小伙伴)

posted @ 2015-04-06 11:21  mtant  阅读(165)  评论(0编辑  收藏  举报