劍指offer 之 和為S的連續正數序列

2021-07-11 19:00:30 字數 963 閱讀 3049

小明很喜歡數學,有一天他在做數學作業時,要求計算出9~16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100(至少包括兩個數)。沒多久,他就得到另一組連續正數和為100的序列:18,19,20,21,22。現在把問題交給你,你能不能也很快的找出所有和為s的連續正數序列? good luck!

輸出描述:

輸出所有和為s的連續正數序列。序列內按照從小到大的順序,序列間按照開始數字從小到大的順序。

分析:我們可以用一種很巧妙的方式,首先因為這些序列中都有關係,也就是後面的那個序列都是由前乙個序列推出來的,所以我們首先就要得到第乙個序列,那麼如何得到第乙個序列呢?我們讓從1開始加,直到加到某個數出現它的和大於或等於給定的sum。如果是等於,那麼就將從1開始的這個序列直接儲存到list中,但是還得再讓它做一次遍歷,減掉開頭的那個值,然後再迴圈,直到出現大於給定的那個和為止。那麼針對出現大於給定和的情況,我們發現,其實只要讓給定的和去減掉現有的和,這個差值去 % 所有的求和數的個數 ,如果能夠整除,那麼相當於可以平均分配給前面的那幾個數字,讓那些數字都加上這個平均值即可,依次類推,其實剩下來的每乙個序列都可以由這個第乙個序列推出來的。

詳細點:先找到第乙個符合條件的序列,因為這乙個序列必定是最長的,而且其他剩下的都可以通過它推出來,那麼我們發現,接下來的這個序列必定是小於給定值的乙個序列,然後我們再依次從第乙個元素開始,將這個差值加上從頭開始的元素的和,並且去除以剩下的元素的個數,如果能夠整除,那麼直接就將這個平均的數分別依次加到剩下的元素中去即可滿足條件。

public static arraylist> findcontinuoussequence(int sum)

else if(s == sum)

}if(!li.isempty() && li.size() > 2)

list.add(listtemp);}}

} return list;

}

劍指offer之和為S的連續正數序列

題目描述 小明很喜歡數學,有一天他在做數學作業時,要求計算出9 16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100 至少包括兩個數 沒多久,他就得到另一組連續正數和為100的序列 18,19,20,21,22。現在把問題交給你,你能不能也很快的...

劍指Offer之和為S的連續正數序列

題目描述 小明很喜歡數學 有一天他在做數學作業時 要求計算出 9 16的和,他馬上就寫出了正確答案是 100。但是他並不滿足於此 他在想究竟有多少種連續的正數序列的和為 100 至少包括兩個數 沒多久 他就得到另一組連續正數和為 100的序列 18,19,20,21,22 現在把問題交給你 你能不能...

《劍指offer》之和為S的連續正數序列

今天刷的一道題目是是關於窮舉的。小明很喜歡數學,有一天他在做數學作業時,要求計算出9 16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100 至少包括兩個數 沒多久,他就得到另一組連續正數和為100的序列 18,19,20,21,22。現在把問題交...