課後實驗4 返回乙個整數陣列中最大子陣列的和

2022-06-12 21:15:14 字數 2041 閱讀 3390

一、設計思想

本實驗要求輸入乙個正負數混合的整型陣列,長度不限,在此陣列的所有子陣列中找到和最大的陣列,並求出相應陣列的和,且時間複雜度為o(n)。我們在課堂上共同討論了多種解決方案,這些將在下面可能的解決方案中展示,在聽了同學的思路和老師的講解之後, 我們最終選取了老師課堂上描述的比較簡便的思路。如下:

在輸入陣列的環節,採用for無限迴圈加if判斷截止,直到觸發回車鍵為止,將陣列記錄到array中,陣列長度記錄到length中。

判斷最大值環節,從陣列的第乙個數開始,判斷不包含當前數的之前的數的所有子陣列的和中的最大值,和包含當前數的之前的數的所有子陣列的和中的最大值,以及前兩者最大值的比較,利用迴圈和max函式的組合來實現最大值的儲存與更新,在這樣的迴圈模式下,當遇到負數時,通過之前數的最大值和負數之後最大值的變化來決定是否將負數的值加在結果之中,還是只考慮負數之後的數組成的子陣列的最大值。這樣就實現了題目中的所有要求。

在課堂上,我們覺得老師和同學的思路很是巧妙,在完全理解的基礎上,通過思路的指導使我們編寫出了此次的程式。

二、出現的問題

當然,光有思路還是不夠的,在編寫程式以及除錯的時候也出現了些許的問題。

比如在輸入陣列時,剛開始的時候我們選擇了用函式getchar()來輸入,結果發現因為char型別和int型別的轉換問題,使得輸出的是asc碼,於是我們直接輸入到了陣列中,解決了這個問題。

還有在計算子陣列最大值的時候,在最大值替換的過程中忽略了儲存之前陣列的最大值,導致輸出結果不符合要求,在我們在紙上單步演算的過程中發現了這個問題,調整了儲存最大值的順序,最終除錯成功。

三、可能的解決方案

在我們的討論過程中,一共產生了三種解決方案:

1.在不考慮o(n)的時間複雜度的情況下,計算陣列中所有子陣列的和,將其存入陣列中逐個進行比較,找出最大的和。

2.先單個考慮,找出整個陣列的最大值,然後再兩兩相鄰考慮,在三個相鄰考慮,直到遍歷完整個陣列,找出最大子陣列的和。

3.第三種方案就是老師課上說的那種,從陣列的第乙個數開始,判斷不包含當前數的之前的數的所有子陣列的和中的最大值,和包含當前數的之前的數的所有子陣列的和中的最大值,以及前兩者最大值的比較。

四、源**

//

2016 3.21 cheng qiqin hao ying

//返回乙個整數陣列中最大子陣列的和

#include

using

namespace

std;

intmain()

}cout

<

這個陣列的長度為:

"sumofarray=array[0

];

for(i=1;i)

sumofarray=max(sum,sumofarray);//

sumofarray用於存放所有子陣列的和的最大值

cout<

這個整數陣列的子陣列之和的最大值為

"return0;

}

五、結果截圖

六、總結

通過這次的實驗,使我學到了一些關於求陣列中子陣列最大值的知識,方法雖然在書寫上看似簡便,實際上思路確實理解上有一定的困難。   

這次的實驗思路雖然不是我們自發想出來的,而是老師在課堂上對我們的啟發以及提示借鑑來的,但是我們在編寫時是完全理解消化之後得到的,其中的核心思想:從陣列的第乙個數開始,判斷不包含當前數的之前的數的所有子陣列的和中的最大值,和包含當前數的之前的數的所有子陣列的和中的最大值,以及前兩者最大值的比較,利用迴圈和max函式的組合來實現最大值的儲存與更新,在這樣的迴圈模式下,當遇到負數時,通過之前數的最大值和負數之後最大值的變化來決定是否將負數的值加在結果之中,還是只考慮負數之後的數組成的子陣列的最大值。   

還有就是學會了max函式的運用,我覺得這次實驗鍛鍊了我們的邏輯思維能力,我想它會對我以後程式的編寫起到作用的,我會將其轉化為我自己的知識學以致用的!

七、工作照

返回乙個整數陣列中最大子陣列的和4

題目 返回乙個二維整數陣列中最大子陣列的和。要求 1 輸入乙個二維整形陣列,陣列裡有正數也有負數。2 二維陣列首尾相接,象個一條首尾相接帶子一樣。3 陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。4 求所有子陣列的和的最大值。要求時間複雜度為o n 設計思想 目前的解決方案是最笨的...

返回乙個環狀整數陣列中最大子陣列之和

題目 返回乙個整數陣列中最大子陣列的和。要求 結對程式設計要求 分析 相比於上一次的任務,這次的不同在於,陣列是環狀的,求出所有可能子陣列之和的最大值,並確定該子陣列所在的位置。這時就會有兩種想法 a想到環狀,就想到了資料結構中的迴圈鍊錶,balabala。b其實也不難,只是加入環狀之後,每次搜尋子...

返回乙個整數陣列中最大子陣列的和。

該題的意思是 如果乙個陣列為 1 5 3 19 5 3 第乙個數之後若是該數與前乙個數之和大於該數那麼將這個和替換概數 即5 1 5,5不變 而5 3 5 則將三替換為8以此類推 當乙個數與前乙個數之和再次小於這個數時,這個數為乙個下乙個的最小陣列,如5 3 19 11 5 5 則5為下乙個最小陣列...