इस समस्या में, हमें एक धनात्मक पूर्णांक N दिया जाता है और हमें N के बराबर योग के साथ सभी संभावित क्रमागत संख्याओं के अनुक्रम को प्रिंट करना होता है।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
Input: N = 15 Output: 1 2 3 4 5 7 8
इस समस्या का एक सरल समाधान N/2 तक क्रमागत अनुक्रम संयोजनों को जोड़ना है। और फिर उस क्रम को प्रिंट करें जिसका योग N तक है।
उदाहरण
#include<iostream> using namespace std; void printConsequtiveSum(int N){ int start = 1, end = (N+1)/2; while (start < end){ int sum = 0; for (int i = start; i <= end; i++){ sum = sum + i; if (sum == N){ for (int j = start; j <= i; j++) cout<<j<<" "; cout<<endl; break; } if (sum > N) break; } sum = 0; start++; } } int main(){ int N = 25; cout<<"Sequence of consicutive numbers that sum upto "<<N<<" are :\n"; printConsequtiveSum(N); return 0; }
आउटपुट
25 तक योग करने वाली क्रमागत संख्याओं का क्रम है -
3 4 5 6 7 12 13
यह तरीका आसान है लेकिन इतना कारगर नहीं है।
इसलिए, हमारे पास एक अधिक जटिल लेकिन इष्टतम समाधान है जो योग का ट्रैक रखने के लिए पूर्व-गणना की गई सरणी का उपयोग करेगा। इससे योग की जटिलता कम हो जाएगी।
उदाहरण
#include <iostream> using namespace std; void printConsequtiveSum(int N){ int start = 1, end = 1; int sum = 1; while (start <= N/2){ if (sum < N){ end += 1; sum += end; } else if (sum > N){ sum -= start; start += 1; } else if (sum == N){ for (int i = start; i <= end; ++i) cout<<i<<" "; cout<<endl; sum -= start; start += 1; } } } int main(){ int N = 25; cout<<"Sequence of consicutive numbers that sum upto "<<N<<" are:\n"; printConsequtiveSum(N); return 0; }
आउटपुट
लगातार संख्याओं का क्रम जिनका योग 25 तक होता है -
3 4 5 6 7 12 13