এই সমস্যাটিতে, আমাদের একটি পজিটিভ ইন্টিজার N দেওয়া আছে এবং আমাদের সেই সব সম্ভাব্য liên tục সংখ্যার সিকোয়েন্স প্রিন্ট করতে হবে যাদের সমষ্টি N-এর সমান।
একটি উদাহরণ দিয়ে বুঝি,
Input: N = 15 Output: 1 2 3 4 5 7 8
এই সমস্যার একটি সহজ সমাধান হলো N/2 পর্যন্ত liên tục সিকোয়েন্স কম্বিনেশন যোগ করে যাওয়া। এবং যা সমষ্টি 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; }
আউটপুট
The sequence of consecutive numbers that sum up to 25 are −
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; }
আউটপুট
Sequence of consecutive numbers that sum up to 25 are −
3 4 5 6 7 12 13