題目描述
小明很喜歡數學,有一天他在做數學作業時,要求計算出9~16的和,他馬上就寫出了正确答案是100。但是他并不滿足于此,他在想究竟有多少種連續的正數序列的和為100(至少包括兩個數)。沒多久,他就得到另一組連續正數和為100的序列:18,19,20,21,22。現在把問題交給你,你能不能也很快的找出所有和為s的連續正數序列? good luck!
輸出描述:
輸出所有和為s的連續正數序列。序列内按照從小至大的順序,序列間按照開始數字從小到大的順序
此題的思路是:設定兩個指針,一個指向第一個數,一個指向最後一個數,在此之前需要設定第一個數和最後一個數的值,由于是正數序列,是以可以把第一個數設為1,最後一個數為2(因為是要求是連續正數序列,最後不可能和第一個數重合)。下一步就是不斷改變第一個數和最後一個數的值,如果從第一個數到最後一個數的和剛好是要求的和,那麼把所有的數都添加到一個序列中;如果大于要求的和,則說明從第一個數到最後一個數之間的範圍太大,是以減小範圍,需要把第一個數的值加1,同時把目前和減去原來的第一個數的值;如果小于要求的和,說明範圍太小,是以把最後一個數加1,同時把目前的和加上改變之後的最後一個數的值。這樣,不斷修改第一個數和最後一個數的值,就能确定所有連續正數序列的和等于s的序列了。
基于上述思路,實作的代碼如下(已被牛客ac):