এই সমস্যায়, আমাদের একটি সিরিজের জন্য দুটি সংখ্যা n এবং k দেওয়া হয়েছে। আমাদের কাজ হল C++ এ প্রদত্ত সিকোয়েন্সের যোগফল খুঁজে বের করার জন্য একটি প্রোগ্রাম তৈরি করা।
ক্রম হল −
(1*2*3*...*k) + (2*3*...k*(k+1)) + (3*4*...*k*k+1*k+2) + ((n-k+1)*(nk+ 2)*... *(n-k+k).
সমস্যা বর্ণনা − এখানে, আমরা k এর প্রদত্ত মানের উপর ভিত্তি করে nম পদ পর্যন্ত প্রদত্ত সিরিজের যোগফল খুঁজে পাব।
সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক
ইনপুট
n = 4, k = 3
আউটপুট
30
ব্যাখ্যা
Series: (1*2*3) + (2*3*4) = 30
সমাধান পদ্ধতি
একটি সহজ সমাধান হল পুনরাবৃত্তি ব্যবহার করে যোগফল বের করা। আমরা দুটি লুপ ব্যবহার করব, একটি প্রতিটি পদের জন্য এবং দ্বিতীয়টি শব্দের মান খুঁজে বের করার জন্য। তারপর ফলাফল পেতে প্রতিটি পদের মান যোগ করুন।
আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম
উদাহরণ
#include <iostream> using namespace std; int findSeriesSum(int n, int k){ int sumVal = 0, term = 1; for(int i = 1; i <= (n-k + 1); i++){ term = 1; for(int j = i; j< (k+i); j++){ term *= j; } sumVal += term; } return sumVal; } int main(){ int n = 4, k = 3; cout<<"The sum of series is "<<findSeriesSum(n, k); return 0; }
আউটপুট
The sum of series is 30
এই সমাধানটি কার্যকর নয় কারণ এটির একটি নেস্টেড লুপের প্রয়োজন যা O(n 2 অর্ডারের সময় জটিলতা তৈরি করে) )।
একটি দক্ষ সমাধান সিরিজের জন্য সাধারণ সূত্র ব্যবহার করা হতে পারে। সূত্রটি হল,
$\frac{(\square+1)*\square*(\square-1)*(\square-2)*....*(\square-\square+1)}{\square+1}$
আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম
উদাহরণ
#include <iostream> using namespace std; int findSeriesSum(int n, int k){ int sumVal = 1; for(int i = n+1; i > n-k; i--) sumVal *= i; sumVal /= (k + 1); return sumVal; } int main(){ int n = 4, k = 3; cout<<"The sum of series is "<<findSeriesSum(n, k); return 0; }
আউটপুট
The sum of series is 30