输出序列和
描述
給出一個正整數N和長度L,找出一段長度大于等于L的連續非負整數,他們的和恰好為N。答案可能有多個,我們需要找出長度最小的那個。
例如 N = 18 L = 2:
5 + 6 + 7 = 18
3 + 4 + 5 + 6 = 18
都是滿足要求的,但是我們輸出更短的 5 6 7
輸入描述:
輸入數據包括一行: 兩個正整數N(1 ≤ N ≤ 1000000000),L(2 ≤ L ≤ 100)
輸出描述:
從小到大輸出這段連續非負整數,以空格分隔,行末無空格。如果沒有這樣的序列或者找出的序列長度大于100,則輸出No
示例1
輸入:
18 2
復制
輸出:
5 6 7
思路:
/* 等差數列求和: N為已知,只需要根據l來求得a那么在代碼實現時, 我們可以從L開始,依次遍歷所有l的可能(從L到100),并檢查相應求得的數值是否為整數即可。 因為l從小到大,那么一定先找到的是長度最小的。 */ #include<iostream> using namespace std; int main() {int N, L;cin>>N>>L;for(int i = L; i <= 100; i++) {if((2*N+i-i*i)%(2*i) == 0) {//如果首項為整數int start = (2*N+i-i*i)/(2*i);for(int j = 0; j < i-1; j++) {cout<<start+j<<" ";}cout<<start+i-1;return 0;}}cout<<"No"<<endl; }總結
- 上一篇: 归并排序(C++版)
- 下一篇: 无重复字符的最长子串_滑动窗口