《团队开发一(求一个数组的连续的子数组之和的最大值)》
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??《團隊開發(fā)一(求一個數組的連續(xù)的子數組之和的最大值)》
(1)設計思想:一般的,求一個數組的最大子數組之和即是按數組順序依次讓前幾個數的和與下一個數進行比較,設一變量來裝每次比較后的較大的數,依此進行到數組終端;但是考慮到求的是連續(xù)的子數組,則應該想到除了在按順序上的連續(xù)外,還得考慮到末端與首端的連續(xù),所以按數組順序依次求解得到的未必就是連續(xù)的最大的子數組之和,故此必須在此種情況下也求解出最大子數組之和,方法即是同時從數組的兩端依次進行求出各自的最大子數組之和,然后在相遇前求和后與之前所求的最大子數組之和依次相比較,取它們中最大的一個作為連續(xù)的最大子數組之和即可。(因為單獨從一端所求出的最大子數組之和絕對大于兩邊同時進行的其中一邊所求出的最大字數之和,故保證了程序的非冗余性。)
(2)出現的問題:
a:用戶輸入的數組長度與計算機的內存空間分配有沖突:例如不允許數組長度為0,復數,大于與計算機協調的內存空間或大于數組范圍為空間;
b:用戶輸入的上下限不符合邏輯要求,例如下限大于上限,下限或上限超過整型數的范圍;
(3)可能解決的方案:對于以上兩種情況,只需要在用戶與系統界面相交互的時候,設置相應的測試函數,用戶再跟據系統的提示一步步進行即可;
(4)源代碼:
//求一個數組的連續(xù)的最大子數組之和 //李敏,Mar 22th #include <iostream> #include <time.h> using namespace std; int main() { int n, i, j, k,a[1500],b,c; char mm;do{cout<<"請輸入數組長度:"<<endl;cin >> n; //檢測輸入數組長度的合法性 cout<<"請分別輸入兩個數作為數組范圍的限制,其中第一個數為下限,第一個數為上限:"<<endl;cin>>b>>c;if(n==0||n<0||n>1500||n>c-b){cout<<"輸入的數組長度不合法,請重新輸入!"<<endl;cin>>n;}//檢測輸入數組范圍的合法性if(b>c||(b<-2147483648||b==-2147483648)||c==2147483647){cout<<"輸入的數字不合法,請重新輸入:"<<endl;cin>>b>>c;}srand( (unsigned)time( NULL ) ); //srand()函數產生一個以當前時間開始的隨機種子for (i=0; i<n; i++) {a[i]=b+rand()%(c-b+1);}cout<<"系統產生的隨機數為:"<<endl;for (i=0; i<n; i++) {cout<<a[i]<<'\t';}//依次按數組的順序求出當前子數組的最大和int t = a[0]; int sum = t; for (k=1; k<n; k++) { t = max(a[k],t+a[k]);sum = max(sum, t); } //考慮到數組的連續(xù)(即數組可形象化為一個圈),故分別從數組首端和末端同時進行以求出兩端還未相遇前的各自的最大子數組之和int s = a[0]; for (i=1; i<n && s+a[i]>s; i++) s += a[i]; t = a[n]; for (j=n-1; j>=1 && t+a[j]>t; j--) t += a[j]; //依次比較兩端數組還未相遇前的兩個最大子數組之和的和與之前按數組順序求出的最大子數組之和if (i<j && s+t> sum) sum = s+t; //取兩種情況下的最大字數組之和即可cout<<"最大字數組之和為:"<<sum<<endl;cout<<endl;cout<<"*************************************************************"<<endl;cout<<" 繼續(xù)請輸入Y 退出請輸入N "<<endl;cout<<"*************************************************************"<<endl;cin>>mm; }while(mm=='y'||mm=='Y');}?
(4)實驗截圖:
?
(6)總結:團隊開發(fā)其實是一個很好的開發(fā)模式,我們可以結對從互相彼此那汲取到有利自己的東西, 以及增強了自己的合作意識,對于一個難以解決的問題,一個人總是孤立無援的,但是如果融合了兩個人的解決措施,即使再難的問題也能夠分而治之,從而解之,故我們應該積極的投入到項目開發(fā)團隊中。
合作團隊:李敏 ? 劉子晗
?
轉載于:https://www.cnblogs.com/Twinklelittlestar/p/4374974.html
總結
以上是生活随笔為你收集整理的《团队开发一(求一个数组的连续的子数组之和的最大值)》的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决Android Device Cho
- 下一篇: 设计模式学习笔记-观察者模式(转)