題目:
小明很喜歡數學,有一天他在做數學作業時,要求計算出9~16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100(至少包括兩個數)。沒多久,他就得到另一組連續正數和為100的序列:18,19,20,21,22。現在把問題交給你,你能不能也很快的找出所有和為s的連續正數序列? good luck!
解析:我們要找和為s的連續正數序列,因此這個序列是個公差為1的等差數列,而這個序列的中間值代表了平均值的大小。假設序列長度為n,那麼這個序列的中間值可以通過(s / n)得到,知道序列的中間值和長度,也就不難求出這段序列了。
滿足條件的n分兩種情況:
n為奇數時,序列中間的數正好是序列的平均值,所以條件為:(n & 1) == 1 && sum % n == 0;
n為偶數時,序列中間兩個數的平均值是序列的平均值,而這個平均值的小數部分為0.5,所以條件為:(sum % n) * 2 == n.
由題可知n >= 2,那麼n的最大值是多少呢?我們完全可以將n從2到s全部遍歷一次,但是大部分遍歷是不必要的。為了讓n盡可能大,我們讓序列從1開始,根據等差數列的求和公式:s = (1 + n) * n / 2,得到。
假設輸入sum = 100,我們只需遍歷n = 13~2的情況。n = 8時,得到序列[9, 10, 11, 12, 13, 14, 15, 16];n = 5時,得到序列[18, 19, 20, 21, 22]。
完整**:
class solution
arr.push_back(list);
}
}
return arr;
}};
和為S的連續正數序列
題目描述 小明很喜歡數學,有一天他在做數學作業時,要求計算出9 16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100 至少包括兩個數 沒多久,他就得到另一組連續正數和為100的序列 18,19,20,21,22。現在把問題交給你,你能不能也很快的...
和為S的連續正數序列
小明很喜歡數學,有一天他在做數學作業時,要求計算出9 16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100 至少包括兩個數 沒多久,他就得到另一組連續正數和為100的序列 18,19,20,21,22。現在把問題交給你,你能不能也很快的找出所有和...
和為S的連續正數序列
小明很喜歡數學,有一天他在做數學作業時,要求計算出9 16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100 至少包括兩個數 沒多久,他就得到另一組連續正數和為100的序列 18,19,20,21,22。現在把問題交給你,你能不能也很快的找出所有和...