問題 等值首尾和
假設有乙個陣列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迴圈,簡潔多了。因此還沾沾自喜,再看看作者的答案
1int 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檔案有錯,就顯...