給出一個(gè)正整數(shù)N和長(zhǎng)度L,找出一段長(zhǎng)度大于等于L的連續(xù)非負(fù)整數(shù),他們的和恰好為N。答案可能有多個(gè),我我們需要找出長(zhǎng)度最小的那個(gè)。 例如 N = 18 L = 2: 5 + 6 + 7 = 18 3 + 4 + 5 + 6 = 18 都是滿足要求的,但是我們輸出更短的 5 6 7 輸入描述:輸入數(shù)據(jù)包括一行: 兩個(gè)正整數(shù)N(1 ≤ N ≤ 1000000000),L(2 ≤ L ≤ 100) 輸出描述:從小到大輸出這段連續(xù)非負(fù)整數(shù),以空格分隔,行末無空格。如果沒有這樣的序列或者找出的序列長(zhǎng)度大于100,則輸出No 輸入例子:18 2 輸出例子:5 6 7
if(ans.size() == 0) cout << "No" << endl; else { for(int i = 0; i < ans.size(); i++) { i == 0 ? cout << ans[i] : cout << " " << ans[i]; } } return 0; } 這里需要用到等差公式求和: ![]() 這里首先說明一下:L * (L - 1) / 2的由來 假設(shè)有L0個(gè)數(shù)。 設(shè)第一個(gè)數(shù): a ,則 第二個(gè)數(shù):a+1 第2個(gè)數(shù):a+2 第3個(gè)數(shù):a+3 第4個(gè)數(shù):a+4 ...................... 第L0個(gè)數(shù):a+L0 則第一個(gè)數(shù)到底L0個(gè)數(shù)的和為: a*L0 + 0+1+2+3+4+.....+L0 0+1+2+3+4+.....+L0運(yùn)用等差公式:為L0 * (L0 - 1) / 2 ![]() 2、然后用總數(shù)減去L * (L - 1) / 2是否大于0,并且,差能否整除i。 |
|