একটি ধনাত্মক সংখ্যার অ্যারে দেওয়া আছে। প্রতিটি এলিমেন্ট নির্দেশ করে সেটি ইনডেক্স থেকে সর্বোচ্চ কতগুলো জাম্প করা যায় অ্যারেতে শেষে পৌঁছানোর জন্য। লক্ষ্য হলো প্রতিটি এলিমেন্ট থেকে শেষে পৌঁছানোর জন্য কতগুলো জাম্প পদ্ধতি আছে সেটি বের করা। যদি arr[] = [1,2,3] হয়, তবে ১-এর জন্য জাম্প ১, ২-এর জন্য জাম্প ১ বা ২, এবং ৩-এর জন্য জাম্প ১, ২ বা ৩ হতে পারে।
উদাহরণ ১
ইনপুট
arr[] = {1,2,3}
আউটপুট
অ্যারের শেষে পৌঁছানোর জন্য জাম্প করার পদ্ধতির সংখ্যা: 1 1 0
ব্যাখ্যা
১-এর জন্য জাম্প: ১, ২-এর জন্য জাম্প ১ বা ২, শেষে পৌঁছাতে শুধু ১ জাম্প ১ দরকার। ৩-এর জন্য জাম্প ১,২ অথবা ৩, এটা শেষে আছে তাই কোনো জাম্প দরকার নেই।
উদাহরণ ২
ইনপুট
arr[] = {4,3,6,2}
আউটপুট
অ্যারের শেষে পৌঁছানোর জন্য জাম্প করার পদ্ধতির সংখ্যা: 4 2 1 0
ব্যাখ্যা
৪-এর জন্য জাম্প: ১, ২, ৩ বা ৪। শেষে পৌঁছাতে শুধু ১,২ বা ৩ দরকার। পদ্ধতিগুলো: ৪-৩-৬-২, ৪-৬-২, ৪-২, ৪-৩-২। মোট ৪। ৩-এর জন্য জাম্প ১, ২ বা ৩। শেষে পৌঁছাতে উভয় দরকার। পদ্ধতি: ৩-৬-২, ৩-২। মোট ২। ৬-এর জন্য জাম্প ১ থেকে ৫, শেষে পৌঁছাতে ১ দরকার। পদ্ধতি: ৬-২। মোট ১। ২-এর জন্য জাম্প ১ বা ২, এটা শেষে আছে তাই কোনো জাম্প দরকার নেই।
প্রয়োগ করা পদ্ধতি
এই পদ্ধতিতে প্রতিটি এলিমেন্ট arr[i]-এর জন্য সেটির আগে থাকা সকল এলিমেন্ট যেগুলো শেষে পৌঁছাতে পারে এবং বর্তমান এলিমেন্ট থেকে যেগুলো erreichযোগ্য, সেসব এলিমেন্টের পদ্ধতির কাউন্ট যোগ করা হয়। এছাড়া ১ যোগ করা হয় যদি arr[i] থেকে এক জাম্পে সরাসরি শেষে পৌঁছানো যায়।
ইন্টিজার অ্যারে
arr[]নিন।reach_end(int arr[], int size)ফাংশনটি অ্যারে গ্রহণ করে শেষে পৌঁছানোর পদ্ধতির সংখ্যা রিটার্ন করে।arr_2[]অ্যারে নিন প্রতিটি এলিমেন্ট থেকে শেষে পৌঁছানোর পদ্ধতি সংরক্ষণের জন্য।memset(arr_2, 0, sizeof(arr_2))দিয়ে পুরোarr_2[]০ দিয়ে আরম্ভ করুন।forলুপ দিয়েi=size-2থেকেi=0পর্যন্তarr[]ট্রুভার্স করুন (শেষ এলিমেন্ট বিবেচনা করা হয় না)।temp = size - i - 1নিন। যদিtemp >= arr[i]হয় তবে এক জাম্পে সরাসরি শেষে পৌঁছানো যায়।arr_2[i]++দিয়ে পদ্ধতি বাড়ান।এখন সকল এলিমেন্ট যারা শেষে পৌঁছাতে পারে এবং যাদের বর্তমান এলিমেন্ট থেকে পৌঁছানো যায়, সেসব এলিমেন্টের পদ্ধতির কাউন্ট
arr_2[i]-এ যোগ করুন।উপরোক্ত কাজের জন্য
forলুপ দিয়েj=i+1থেকেjএবং j<=arr[i]+iপর্যন্ত ট্রুভার্স করুন। যদি কোনোarr[j]-১ না হয়, তবে সেটিarr_2[i]-এ যোগ করুন।যদি এখনও
arr_2[i]০ থাকে, তবে সেটিকে -১ সেট করুন, অর্থাৎ সেটি থেকে শেষে পৌঁছানো সম্ভব নয়।সকল লুপ শেষে
arr_2[]-এ প্রতিটি এলিমেন্টের জন্য শেষে পৌঁছানোর পদ্ধতি থাকবে।forলুপ দিয়েarr_2প্রিন্ট করুন ফলাফল হিসেবে।
উদাহরণ কোড
#include <bits/stdc++.h>
using namespace std;
void reach_end(int arr[], int size) {
int arr_2[size];
memset(arr_2, 0, sizeof(arr_2));
for (int i = size-2; i >= 0; i--) {
int temp = size - i - 1;
if (arr[i] >= temp) {
arr_2[i]++;
}
for (int j = i+1; j < size-1 && j <= arr[i] + i; j++) {
if (arr_2[j] != -1) {
arr_2[i] = arr_2[i] + arr_2[j];
}
}
if(arr_2[i] == 0) {
arr_2[i] = -1;
}
}
cout << "অ্যারের শেষে পৌঁছানোর জন্য জাম্প করার পদ্ধতির সংখ্যা: ";
for (int i=0; i < size; i++) {
cout << arr_2[i] << " ";
}
}
int main() {
int arr[] = {2, 3, 7, 1, 8, 9};
int size = sizeof(arr) / sizeof(arr[0]);
reach_end(arr, size);
return 0;
}
আউটপুট
উপরোক্ত কোডটি রান করলে নিচের আউটপুটটি আসবে:
অ্যারের শেষে পৌঁছানোর জন্য জাম্প করার পদ্ধতির সংখ্যা: 8 5 3 1 1 0