结对开发——求最大值
一、題目:
? ? ? 返回一個整數數組中最大子數組的和。
要求:
1.輸入一個整形數組,數組里有正數也有負數。
2.數組中連續的一個或多個整數組成一個子數組,每個子數組都有一個和。
3.求所有子數組的和的最大值。要求時間復雜度為O(n)。
二、設計思路
1.數組num[]長度已確定是N,將數組中字數組的和放到數組sum[]中;
2.sum[0]=num[0],sum[1]=num[0]+num[1],sum[2]=num[0]+num[1]+num[2]……;
? ? sum[N]=num[1],sum[N+1]=num[1]+num[2]……如此循環,直至所有自己的和全部存進??數組sum中;
3.然后求出數組sum中的最大值,再輸出結果;
? ? ? 4.單獨判斷一些特殊的容易計算的情況,比如全是負數、全是正數、只有一個正數。這樣能有效地提高程序的效率。
三、源代碼
1 // 求和.cpp : Defines the entry point for the console application. 2 // 2015/3/18 16:12 袁佩佩 于海洋 信1201-1班 3 4 #include "stdafx.h" 5 #include"iostream.h" 6 #define SIZE 5 //數組的個數 7 #define MAXSIZE 100 //子集個數的最大值 8 void CaculateSum(int sum[],int length,int num[])//計算數組中各個子集的和 9 { 10 int j=0; 11 for(int i=0;i<SIZE;i++) 12 { 13 for(int k=i;k<SIZE;k++) 14 { 15 if(i==k) 16 { 17 sum[j]+=num[k]; 18 } 19 else 20 { 21 sum[j]=sum[j-1]+num[k]; 22 } 23 j++; 24 } 25 } 26 } 27 //求所有情況的個數 28 int GetAcc() 29 { 30 int acc=0; 31 for(int i=1;i<=SIZE;i++) 32 { 33 acc+=i; 34 } 35 return acc; 36 } 37 //找出數組中的最大值,length是b[]中的個數 38 int GetMax(int b[],int length) 39 { 40 int max=b[0]; 41 for(int i=0;i<length;i++) 42 { 43 if(max<b[i]) 44 { 45 max=b[i]; 46 } 47 } 48 return max; 49 } 50 int main() 51 { 52 int num[SIZE],sum[MAXSIZE],max=0,acc; 53 int count[2]={0,0}; //num[num]是要求的整數count[2]中是負數和正數的個數 54 cout<<"請輸入"<<SIZE<<"個整數:"; 55 for(int i=0;i<SIZE;i++) //計算數組中正數和負數的個數 56 { 57 cin>>num[i]; 58 if(num[i]<0) 59 count[0]++; //負數的個數 60 else 61 count[1]++; //正數 62 } 63 acc=GetAcc(); 64 for(i=0;i<acc;i++) 65 { 66 sum[i]=0; 67 } 68 if(count[0]==0) //若全是正數的話 69 { 70 for(int i=0;i<SIZE;i++) 71 { 72 max+=num[i]; 73 } 74 } 75 else if((count[1]==0)||(count[0]==1)) //若全是負數或者有一個正數 76 { 77 max=GetMax(num,SIZE); 78 } 79 else //其他情況 80 { 81 CaculateSum(sum,acc,num); 82 max=GetMax(sum,acc); 83 } 84 cout<<"最大子集的和是:"<<max<<endl; 85 return 0; 86 }四、結果截圖
五、心得體會
? 我和于同學之前就經常合作,所以這次搭檔還算順利。我倆上課的時候就討論出了這個題目的大體思路,今天我們又對算法的具體實現進行了討論和調試。
? 俗話說:“男女搭配,干活不累。”我比較細心,他比較有執行力。于同學可以帶起整個編程創作的氣氛,我也很快進入狀態,能夠及時準確的發現他的錯誤并快速改正。整個過程效率比自己編程時要高。
? 其實一開始我根據我和搭檔確定的思路寫出了算法,但是運行時有錯并且特別復雜。我們調試了幾次都沒能成功,于是他就換了種思考方式,很快寫了新的算法。經過幾次調試之后,程序成功運行了。這一點我挺欣賞他的,因為它發現這條路走不通或特別難走時,可以馬上改變路徑正確的到達目的地。
六、有圖有真相
? 請無視我那無神的雙目,和那油油的頭發...
?
轉載于:https://www.cnblogs.com/JJJanepp/p/4346942.html
總結
以上是生活随笔為你收集整理的结对开发——求最大值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 账户系统,余额与体现
- 下一篇: 对VS2008生成智能win32程序简单