এই সমস্যায়, আমাদের একটি ধনাত্মক পূর্ণসংখ্যা 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