EOJ 3276 連續正整數之和(模擬)

2021-08-08 00:25:40 字數 842 閱讀 4098

題意:給定乙個正整數 n,判斷其是否可以表示為一組連續正整數的和,輸出符合條件的解的組數。如15=1+2+3+4+5=4+5+6=7+8,組數為3.

設連續整數的起始數為i,連續個數為k,那麼n=

i+(i

+1)+

(i+2

)...

(i+k

−1)2

=(2∗

i+k−

1)∗k

2 。

可以用兩重迴圈遍歷 i 和 k,時間複雜度為o(n^2)。其實可以通過公式變換限定i,把複雜度降到o(n)。

整理公式可得,i=

2∗nk

−k+1

2 ,那麼 i 的正整數解個數就是答案數。要使得 i 的值合法,只要遍歷k,滿足2n能整除於k,且2∗

nk−k

+1能整除於2。

需要注意的是

#include 

using

namespace

std;

void solve(int n)

int ans = 0, k, tmp; //i+(i+1)..(i+k-1),從i開始累加k個數

//i+(i+1)+(i+2)...(i+k-1) = (2i+k-1)*k/2

//i = (2*n/k - k + 1) / 2

for (int k = 1; k <= n/2; ++k)

}cout

<< ans-1

<< endl; //去掉自身

}int main()

return

0;}

3276 連續正整數之和

單點時限 2.0 sec 記憶體限制 256 mb 有些正整數可以表示為 n n 1 個連續正整數的和,如 15 1 2 3 4 5 4 5 6 7 8 給定乙個正整數 n,判斷其是否可以表示為一組連續正整數的和,輸出符合條件的解的組數。輸入格式 第 1 行 乙個整數 t 1 t 10 為問題數。第...

計蒜客 難題題庫 143 連續正整數

乙個正整數有可能被表示為 n n 2 個連續正整數之和,如 15 1 2 3 4 5 15 4 5 6 15 7 8 請編寫程式,根據輸入的任何乙個正整數,找出符合這種要求的所有連續正整數序列。輸入資料 乙個正整數,以命令列引數的形式提供給程式。輸出資料 在標準輸出上列印出符合題目描述的全部正整數序...

面試題1 連續整數之和為1000的共有幾組?

連續整數之和為1000的共有幾組?假設整數非負 這是一道小學數學題。暴力解法,設滿足條件連續整數中最小的那個為i,遍歷 i in 1,1000 計算數列 i,i 1 i 2 i 3 的部分和 partial sum 如果部分和等於1000,則輸出 如果部分和大於1000,則跳出本層迴圈。python...