軟體工程課堂練習--結對開發

來源:互聯網
上載者:User

標籤:

一、題目要求

題目:返回一個二維整數數組中最大子數組的和。要求:輸入一個二維整形數組,數組裡有正數也有負數。二維數組首尾相接,象個一條首尾相接帶子一樣。數組中連續的一個或多個整數組成一個子數組,每個子數組都有一個和。求所有子數組的和的最大值。要求時間複雜度為O(n)。二、設計思路這次的題目設計思路沿用的是上次一位元組的設計思想,把二維數組中的每一行看作是一位元組,然後做出擴充,程式依然用的是二維數組的那個,在這個基礎上做出稍稍改變就行了三、原始碼
  1 //程式開發人員:曹美娜 蓋相庚  2 //   開發時間:2015/3/31  3   4 #include "stdafx.h"  5 #include "fstream.h"  6 #include "iostream.h"  7 #include "stdio.h"  8 #define N 50  9 #define M 50 10  11 void readarry(int arry[][N],int &line,int &row)            //讀取txt檔案中的二維數組 12 { 13     ifstream infile("a.txt"); 14     if(!infile) 15         cout<<"讀取失敗!"<<endl; 16     else 17     { 18         infile>>line>>row; 19         for(int i=0;i<line;i++) 20         { 21             for(int j=0;j<row;j++) 22             { 23                 infile>>arry[i][j]; 24             } 25         } 26     } 27 } 28  29 int maxarry(int arry[][N],int line,int row)       //找到二維數組中子矩陣中元素和的最大值 30 { 31     int max[N]; 32     printf("以上數組經變形後:\n"); 33     for(int l=0;l<line;l++)                 34     { 35         int max1=-1000; 36          for(int j=0;j<(row+1)/2;j++) 37         { 38             int sum=0;         39             for(int i=j;i<(row+1)/2;i++) 40            { 41                 sum=sum+arry[l][i]; 42                 if(sum>=max1) 43                 { 44                     max1=sum; 45                 } 46            } 47                          48          } 49              max[l]=max1; 50               51             printf("第%d集合所有子數組的和的最大值為:%d\n",l+1,max1); 52     } 53     int fmax=max[0]; 54     for(int q=0;q<line;q++) 55     { 56         if(max[q]>fmax) 57           fmax=max[q]; 58     } 59      printf("所以次二位元字中子數組中各元素的和的最大值為:%d\n",fmax); 60          61         return 0; 62 } 63  64 void reacharry(int arry[][N],int line,int row)      //組成一個新數組 65 { 66     int sumarry[M][N]; 67     int sumline,sumrow; 68     int z; 69     for(int r=0;r<row;r++) 70     { 71         z=0; 72         for(int i=0;i<line;i++) 73         { 74             for(int q=line;q>0;q--) 75             { 76                 int sum=0; 77                 for(int j=i;j<=line-q+i;j++) 78                 { 79                     sum=sum+arry[j][r]; 80                 }             81                 sumarry[z][r]=sum; 82                 z++;             83             } 84         } 85     } 86     sumline=z-1; 87     sumrow=r;     88     maxarry(sumarry,sumline,sumrow);      //將得到的新數組交給maxsrry(),找到最後結果 89  90 } 91  92 int expand(int arry[][N],int &line,int &row)     //對二維數組進行拓展 93 { 94     int arry1[N][N]; 95     for(int i=0;i<line;i++) 96     { 97         for(int j=0;j<row;j++) 98         { 99             arry1[i][j]=arry[i][j];100         }101     }102     int num=0;103     for(i=0;i<line;i++)104     {105         for(int q=row;q<2*row-1;q++)106         {107             arry[i][q]=arry[i][num];108             num++;109         }110     }111     reacharry(arry1,line,2*row-1);112 113     return 0;114 115 }116 117 118 119 void show(int arry[][N],int line,int row)      //顯示數組120 {121     printf("從“a.txt”檔案中讀取的數組為:\n");122     for(int i=0;i<line;i++)123     {124         for(int j=0;j<row;j++)125         {126             printf("\t%d\t",arry[i][j]);127         }128         printf("\n");129     }130 }131 132 133 134 135 int main(int argc, char* argv[])136 {137     int arry[M][N];138     int line,row;                 //行,列139     readarry(arry,line,row);140     show(arry,line,row);141     expand(arry,line,row);142     143    return 0;144 }

四、

可能由於我沒有講拓展後的數組輸出,所以讀者可能看不太出來設計思路,其實設計思路在我上幾篇部落格中都有提到,這幾個的程式設計思路都有所相同

五、心得體會

本次結對開發用時最短,因為是在上一次二維數組上做的拓展,所以思路捋起來很清晰,所以完成的也就快了,這次放假前老師說要要我們小小的放鬆一下,所以會有一下段時間不會在和我的小夥伴結對程式設計了,總結一下這幾次的結對開發的想法吧,我的小夥伴還是很給力的,只不過是比較自謙,不太信任自己的能力,有時候想東西他也是要比我快的,思維要比我更活躍,希望蓋蓋同學好好努力,不要太早的為自己蓋上標籤。

結對開發就是要2個人把自己的想法、熱情都交給對方,一開始老師叫我們這樣練習的目的大家都認為太形式化,可是幾次下來我想大家或多或少都會有自己的收穫,都能從對方身上學到些東西,我想大家也會在這段時間裡慢慢成長起來。

軟體工程課堂練習--結對開發

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.