程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 體驗結對開發的樂趣(5)--(首尾相連的二維數組求最大子數組和的問題),結對二維數組

體驗結對開發的樂趣(5)--(首尾相連的二維數組求最大子數組和的問題),結對二維數組

編輯:關於C語言

體驗結對開發的樂趣(5)--(首尾相連的二維數組求最大子數組和的問題),結對二維數組


結對伙伴:信1201-2班高揚、信1201-1班韓雪東

一、題目要求與設計思想

題目要求:在上一次的基礎上把數組變為二維數組,然後首尾相接,形成連環,然後求和最大的子數組;

設計思想:一維數組首尾相連的問題已經得到解決,二位數組求和最大的子數組的問題也已經解決了,就是把這兩個程序思想融在一起,然後在短短的時間內就完成了這次課堂項目。

二、源代碼

  1 // erweishuzuqiuzuida.cpp : Defines the entry point for the console application.
  2 // 高揚 韓雪東
  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;                       //len1是行數,len2是列數
 92     
 93     int x[3];
 94     int y[3];
 95     int *k;
 96     int *l;
 97     int array[MAXSIZE][MAXSIZE];
 98     read(array,len1,len2);
 99     cout<<"矩陣:"<<endl;
100     display(array,0,0,len1-1,len2-1);
101     
102     
103     
104     for(int i=0;i<3;i++)
105     {
106         x[i]=array[0][i];
107         
108     }
109     int e=3;
110     int w[6];
111     int u[6];
112     int q=0;
113     printf("數組第一行子數組的和:");
114     for(i=2;i>=0;i--)
115     {
116         
117         k=shuchu(x,3,i);
118         for(int r=0;r<e;r++)
119         {
120             
121             w[q]=k[r];
122             printf("%d  ",w[q]);
123             q++;
124         }
125         e--;    
126     }
127     for(int j=0;j<3;j++)
128     {
129         y[j]=array[1][j];
130     }
131     printf("\n");
132     e=3;
133     q=0;
134     printf("數組第二行子數組的和:");
135     for(i=2;i>=0;i--)
136     {
137         
138         l=shuchu(y,3,i);
139         for(int r=0;r<e;r++)
140         {
141             
142             u[q]=l[r];
143             printf("%d  ",u[q]);
144             q++;
145         }
146         e--;    
147     }
148     
149     
150     printf("\n");
151     int h[6];
152     printf("數組包含兩行的子數組的和:");
153     for(int m=0;m<6;m++)
154     {
155         h[m]=w[m]+u[m];
156         printf("%d  ",h[m]);
157     }
158     
159     
160     int k1=maxs(w,6);
161     int k2=maxs(u,6);
162     int k3=maxs(h,6);
163     
164     int maxx=k1;
165     if(maxx<=k2)
166     {
167         maxx=k2;
168     }
169     if(maxx<=k3)
170     {
171         maxx=k3;
172     }
173     printf("\n最大和%d\n",maxx);
174     
175     
176     
177     
178     int r1;
179     int p1;
180     for(int t=0;t<2;t++)
181     {
182         p1=array[0][0];
183         r1=array[1][0];
184         for(q=0;q<2;q++)
185         {
186             
187             array[0][q]=array[0][q+1];
188             array[1][q]=array[1][q+1];
189             
190         }
191         array[0][2]=p1;
192         array[1][2]=r1;
193         for(int i=0;i<3;i++)
194         {
195             x[i]=array[0][i];
196             
197         }
198         int e=3;
199         int w[6];
200         int u[6];
201         int q=0;
202         printf("數組第一行子數組的和:");
203         for(i=2;i>=0;i--)
204         {
205             
206             k=shuchu(x,3,i);
207             for(int r=0;r<e;r++)
208             {
209                 
210                 w[q]=k[r];
211                 printf("%d  ",w[q]);
212                 q++;
213             }
214             e--;    
215         }
216         for(int j=0;j<3;j++)
217         {
218             y[j]=array[1][j];
219         }
220         printf("\n");
221         e=3;
222         q=0;
223         printf("數組第二行子數組的和:");
224         for(i=2;i>=0;i--)
225         {
226             
227             l=shuchu(y,3,i);
228             for(int r=0;r<e;r++)
229             {
230                 
231                 u[q]=l[r];
232                 printf("%d  ",u[q]);
233                 q++;
234             }
235             e--;    
236         }
237         
238         
239         printf("\n");
240         int h[6];
241         printf("數組包含兩行的子數組的和:");
242         for(int m=0;m<6;m++)
243         {
244             h[m]=w[m]+u[m];
245             printf("%d  ",h[m]);
246         }
247         
248         
249         int k1=maxs(w,6);
250         int k2=maxs(u,6);
251         int k3=maxs(h,6);
252         
253         int maxx=k1;
254         if(maxx<=k2)
255         {
256             maxx=k2;
257         }
258         if(maxx<=k3)
259         {
260             maxx=k3;
261         }
262         printf("\n最大和%d\n",maxx);
263     }
264 
265         return 0;
266 
267     
268 }

三、運行結果截圖

四、心得體會

在讀《夢斷代碼》之後,這本書上有一句話是這樣寫的:“當你把系統的一塊新部件放進去,總要看看之後的5年獲10年自己會不會後悔--你是否能拓展它、替代它”,隨著問題的深入,我深刻的體會到了基礎的重要性,體會到了代碼的可擴展性給以後的修改帶來多大的方便。還有就是1+1>2的問題,結對開發把兩個人的想法匯到一起,不論是在編程效率上還是思路設計上都會比一個人的快,希望在團隊開發的時候還會有這樣的體會。

五、有圖有真相

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved