สมมติว่าเรามีจำนวนเต็มบวก N เราต้องหาว่าเราจะเขียนมันเป็นผลรวมของจำนวนเต็มบวกต่อเนื่องได้กี่วิธี
ดังนั้น หากอินพุตเท่ากับ 10 ผลลัพธ์จะเป็น 3 เนื่องจากเราสามารถแทน 10 เป็น 5 + 5 และ 7 + 3 ได้ จึงมี 2 วิธีที่แตกต่างกัน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
ยกเลิก :=1
-
สำหรับการเริ่มต้น i :=2, (เพิ่ม i โดย 1) ทำ −
-
ผลรวม :=(i * (i + 1)) / 2
-
ถ้า sum> N แล้ว −
-
ออกจากวง
-
-
rem :=N - ผลรวม
-
ret :=ret + (1 เมื่อ rem mod i เป็น 0, มิฉะนั้น 0)
-
-
รีเทิร์น
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
#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)); }
อินพุต
10
ผลลัพธ์
2