Giả sử chúng ta có một số nguyên dương N, chúng ta phải tìm bao nhiêu cách khác nhau để viết nó thành tổng của các số nguyên dương liên tiếp?
Vì vậy, nếu đầu vào là 10, thì đầu ra sẽ là 3, điều này là do chúng ta có thể biểu diễn 10 dưới dạng 5 + 5 và 7 + 3, vì vậy có hai cách khác nhau.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
ret:=1
-
để khởi tạo i:=2, (tăng i lên 1), do -
-
tổng:=(i * (i + 1)) / 2
-
nếu tổng> N, thì -
-
Ra khỏi vòng lặp
-
-
rem:=N - tổng
-
ret:=ret + (1 khi rem mod i là 0, ngược lại là 0)
-
-
trả lại ret
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
#include <bits/stdc++.h> using namespace std; class Solution { public: int consecutiveNumbersSum(int N) { int ret = 1; for(int i = 2; ; i++){ int sum = (i * (i + 1)) / 2; if(sum > N) break; int rem = N - sum; ret += (rem % i == 0); } return ret; } }; main(){ Solution ob;cout << (ob.consecutiveNumbersSum(10)); }
Đầu vào
10
Đầu ra
2