標籤:
題目:返回一個整數數組中最大子數組的和
延伸要求:1,程式必須能處理1000個元素,2,每個元素是int32類型的,出現子數組之和大於整型表示的最大範圍會出現什麼情況,3,結對開發。
成員:郭婷,朱慧敏。
測試程式碼:(郭婷程式)
#include<iostream>#include<time.h>using namespace std;#define max(a,b) ((a)>(b)?(a):(b))int maxsum(int a[], int n){ int i; int maxsofar = 0; int maxendinghere = 0; for (i = 0; i < n; i++) { maxendinghere = max(maxendinghere + a[i], 0); maxsofar = max(maxsofar, maxendinghere); } return maxsofar;}int main(){ int n, i; cout << "輸入數組所包含數的個數:"; cin >> n; int *a; a = new int[n]; if (a == NULL ) { cout << "錯誤!"; return 1; } srand((unsigned)time(NULL)); for (i = 0; i < n; i++) { a[i] = rand() % 200 - 100; cout << a[i] << " " ; } cout << endl; int max=maxsum(a, n); cout << "最大子數組的和為:" << max << endl; delete[]a; return 0;}
輸入10,0000的
其中,符合延伸要求1,程式能處理1000個元素。而能計算的最大範圍是10,0000,在運算10,0000的時候時間就大概用了半分鐘。而計算範圍以外,就幾乎等於死迴圈,運算時間太長。
解決方案:直接反應的解決方案就是把int改成longint或其他範圍更廣的類型。老師舉例醫院的醫學保險系統,將查詢顯示年的內容劃分成按月顯示的,縮小了顯示範圍,減少了顯示內容,就避免了內容溢出。也就是通過控制時間複雜度來控製程序可運算的範圍。個人感覺老師的方法是挺有技巧的。
結對開發作者圖片
總結:結對開發鍛煉我們的合作能力,郭婷的程式比較標準,所以就測試的這個程式。由她的程式,我可以看到我在編程方面確實不是很標準,而且我的程式適用範圍小,相比於較標準程式還是欠缺很多。我感覺合作會使我學到自己的不足,讓自己的程式更加標準化,不那麼”小家子氣“。
軟體工程概論返回一個最大子數組的和延伸