等值首尾和問題及其思考 解決和總結

2022-01-15 01:34:31 字數 957 閱讀 3553

問題 等值首尾和

假設有乙個陣列x,它有n個元素,每乙個都大於零;稱x[0] + x[1] + … + x[i]為前置和(prefix sum),

而x[j] + x[j+1] + … + x[n-1]為後置和(suffix sum)。試編寫乙個程式,求出x中有多少組相同的前置和與後置和。

最容易想到的當然是把前置和與後置和分別算出來放到兩個長度為n的陣列裡面,再檢索兩個陣列相同的元素。

但我們可以注意到每個元素都大於0,所以前置和與後置和都是遞增的。於是我們可以:

設定前後兩個游標

前置和大於後置和,則後游標向前移位,同時後置和加上相應元素;

同理,前置和小於後置和,前游標向後移位,前置和加上相應元素;

兩者相等,則統計數目加1,同時執行兩步操作。

直到某乙個或兩個游標到達終點

下面是我的**

1

//最差情況,交替上公升,執行** 2n 次,n為陣列長度

2int getheadtail(int * a, int

lena)317

while (suffixsum < prefixsum && tail >= 0

)18

21if (prefixsum ==suffixsum)

2225}26

return

count;

27 }

本來用的for迴圈,邏輯一樣,卻導致**看上去很凌亂。後來改成了while迴圈,簡潔多了。因此還沾沾自喜,再看看作者的答案

1

int head_tail(int x, intn)2

18}19return

count;

20 }

作者的邏輯清晰,**整潔。  而我的還有乙個bug————可能會漏掉前後全部加完的情況。

問題及答案**————《c語言名題精選百則技巧篇》問題1.5

隱藏終端和暴露終端問題及其解決辦法

隱藏終端 hidden stations 在通訊領域,基站a向基站b傳送資訊,基站c未偵測到a也向b傳送,故a和c同時將訊號傳送至b,引起訊號衝突,最終導致傳送至b的訊號都丟失了。隱藏終端 多發生在大型單元中 一般在室外環境 這將帶來效率損失,並且需要錯誤恢復機制。當需要傳送大容量檔案時,尤其需要杜...

IIS常見問題和錯誤及其解決方案

q 為什麼我的asp頁面到windows2003後就不能執行了,執行aspx正常。a windows2003中預設沒有啟用asp支援,在iis的web service extensions 裡找到activeserver pages,將allow 選上,就可以了。q 我的iis只要asp檔案有錯,就...

IIS常見問題和錯誤及其解決方案

q 為什麼我的asp頁面到windows2003後就不能執行了,執行aspx正常。a windows2003中預設沒有啟用asp支援,在iis的web service extensions裡找到active server pages,將allow選上,就可以了。q 我的iis只要asp檔案有錯,就顯...