体验结对开发的乐趣(2)--(二位数组求和最大的子数组)

一、队员:

信1201-2班高扬、信1201-1班韩雪东

二、题目要求

这次比上一次增加了一些难度,改为二维数组求和最大的子数组。

三、设计思想

上一次实现的一位数组的,然后就想把二维数组转化为一维数组来做,首先解决第一行的最大子数组问题,方法就和上次一样了,然后第二行,然后第一行和第二行的相加求出两行的,然后分别存放在三个一维数组里,然后对这三个数组里求最大的值。

四、源代码

  1 // erweishuzuqiuzuida.cpp : Defines the entry point for the console application.
  2 //信1201-2班高扬、信1201-1班韩雪东
  3 
  4 #include "stdafx.h"
  5 #include "fstream.h"
  6 #include "iostream.h"
  7 #include "stdio.h"
  8 
  9 #define MAXSIZE 50
 10 
 11 
 12 void read(int array[][MAXSIZE],int &len1,int &len2)//读取文件信息,并写入数组
 13 {
 14     ifstream infile("array.txt");
 15     if(!infile)
 16         cout<<"读取失败!"<<endl;
 17     else
 18     {
 19         infile>>len1>>len2;
 20         for(int i=0;i<len1;i++)
 21         {
 22             for(int j=0;j<len2;j++)
 23             {
 24                 infile>>array[i][j];
 25             }
 26         }
 27     }
 28 }
 29 void display(int array[][MAXSIZE],int len1,int len2,int size1,int size2)//显示数组信息
 30 {
 31     for(int i=len1;i<=size1;i++)
 32     {
 33         for(int j=len2;j<=size2;j++)
 34         {
 35             cout<<array[i][j]<<"\t";
 36         }
 37         cout<<endl;
 38     }
 39 }
 40 int * shuchu(int m[],int szcdx,int xhy)//m[]表示要测试的数组,szchx表示数组长度,xhy表示循环条件
 41 {
 42     int t,p;
 43     int max,sum;
 44     //缓存数组赋值
 45     int c[10000];
 46     int v[10000];
 47     int o=2*szcdx;
 48     int * temp= new int[o];
 49 
 50     for(t=szcdx-xhy-1;t<szcdx;t++)
 51     {
 52         c[t-szcdx+xhy+1]=m[t];
 53     }
 54     //循环
 55     for(t=xhy;t>=0;t--)
 56     {
 57         sum=0;
 58         for(p=0;p<=t;p++)
 59         {
 60             sum=sum+c[p];
 61         }
 62         v[t]=sum;
 63     }
 64     //循环输出最大值
 65     max=v[0];
 66     for(t=0;t<xhy+1;t++)
 67     {
 68         if(max<=v[t])
 69         {
 70             max=v[t];
 71         }
 72         //printf("%d  ",v[t]);
 73         temp[t]=v[t];
 74     }
 75     return temp;
 76 }
 77 int maxs(int s[],int length)//输出最大值
 78 {
 79     int d=s[0];
 80     for(int f=0;f<length;f++)
 81     {
 82         if(d<=s[f])
 83         {
 84             d=s[f];
 85         }
 86     }
 87     return d;    
 88 }
 89 int main(int argc, char* argv[])
 90 {
 91     int len1,len2;
 92     int x[3];
 93     int y[3];
 94     int *k;
 95     int *l;
 96     int array[MAXSIZE][MAXSIZE];
 97     read(array,len1,len2);
 98     cout<<"矩阵:"<<endl;
 99     display(array,0,0,len1-1,len2-1);
100 
101 
102 
103     for(int i=0;i<3;i++)
104     {
105         x[i]=array[0][i];
106 
107     }
108     int e=3;
109     int w[6];
110     int u[6];
111     int q=0;
112     printf("数组第一行子数组的和:");
113     for(i=2;i>=0;i--)
114     {
115         
116         k=shuchu(x,3,i);
117         for(int r=0;r<e;r++)
118         {
119             
120             w[q]=k[r];
121             printf("%d  ",w[q]);
122             q++;
123         }
124         e--;    
125     }
126     for(int j=0;j<3;j++)
127     {
128         y[j]=array[1][j];
129     }
130     printf("\n");
131     e=3;
132     q=0;
133     printf("数组第二行子数组的和:");
134     for(i=2;i>=0;i--)
135     {
136         
137         l=shuchu(y,3,i);
138         for(int r=0;r<e;r++)
139         {
140             
141             u[q]=l[r];
142             printf("%d  ",u[q]);
143             q++;
144         }
145         e--;    
146     }
147 
148 
149     printf("\n");
150     int h[6];
151     printf("数组包含两行的子数组的和:");
152     for(int m=0;m<6;m++)
153     {
154         h[m]=w[m]+u[m];
155         printf("%d  ",h[m]);
156     }
157     
158 
159     int k1=maxs(w,6);
160     int k2=maxs(u,6);
161     int k3=maxs(h,6);
162 
163     int maxx=k1;
164     if(maxx<=k2)
165     {
166         maxx=k2;
167     }
168     if(maxx<=k3)
169     {
170         maxx=k3;
171     }
172     printf("\n最大和%d\n",maxx);
173     return 0;
174 }

五、运算结果截图

 

五、心得体会

这一次实验比上一次增加了一点难度,上一次的逻辑思想就够混乱的了,这一次在调用上一次的函数的时候就出了逻辑的问题,然后在读文件的时候还出了问题。这次大部分的功劳都是队友出的,尤其在逻辑推理上,尤其的比我想的多,感谢有这么一个好队友,感谢高扬。

六、结对开发照

posted @ 2015-03-24 22:10  韩东东  阅读(274)  评论(1编辑  收藏  举报