একটি রানের স্কোর দেওয়া আছে। লক্ষ্য হলো সেই স্কোরে পৌঁছানো কিন্তু ব্যাটসম্যান শুধু ১ বা ২ রান নিতে পারবে একটি বলে। বাধা হলো ২ রান দুবার কনসিকিউটিভ নেওয়া যাবে না। উদাহরণস্বরূপ, স্কোর ৬ পেতে পারা যাবে: ১+২+১+২ কিন্তু ২+২+১+১ বা অন্য যেকোনো কনসিকিউটিভ ২-র পদ্ধতিতে নয়।
উদাহরণ ১
ইনপুট
score=4
আউটপুট
১ এবং ২ দিয়ে কনসিকিউটিভ ২ ছাড়া স্কোর পৌঁছানোর পদ্ধতির সংখ্যা: 4
ব্যাখ্যা
স্কোর ৪ পাওয়ার পদ্ধতিগুলো: ১+১+১+১, ১+১+২, ১+২+১, ২+১+১
উদাহরণ ২
ইনপুট
score=5
আউটপুট
১ এবং ২ দিয়ে কনসিকিউটিভ ২ ছাড়া স্কোর পৌঁছানোর পদ্ধতির সংখ্যা: 6
ব্যাখ্যা
স্কোর ৫ পাওয়ার পদ্ধতিগুলো: ১+১+১+১+১, ২+১+১+১, ১+২+১+১, ১+১+২+১, ১+১+১+২, ২+১+২
প্রয়োগ করা পদ্ধতি
এই পদ্ধতিতে একটি ফ্ল্যাগ ব্যবহার করা হয় যাতে চেক করা যায় আগের রান ২ ছিল কিনা। যদি আগের রান ২ হয়, তবে পরবর্তী রান ১ হবে, অন্যথায় ২ হতে পারে।
ইন্টিজার ভেরিয়েবল
scoreনিন।ফ্ল্যাগ ভেরিয়েবল
check = falseআরম্ভিকভাবে।ways_reach_score(int score, bool check)ফাংশনটি পদ্ধতির সংখ্যা বতায়।আরম্ভিক কাউন্ট ০ রাখুন।
যদি
score == 0হয় তবে ১ রিটার্ন করুন (বেস কেস)।যদি
check == falseহয় (অর্থাৎ আগের রান ১ ছিল) এবং বর্তমান স্কোর ১-র চেয়ে বড় হয়, তবে পদ্ধতি =ways_reach_score(score-1, false) + ways_reach_score(score-2, true)।অন্যথায় (আগের রান ২ ছিল), পরবর্তী রান শুধু ১ হবে, তাই পদ্ধতি =
ways_reach_score(score-1, false)।শেষে মোট পদ্ধতি
count-এ থাকবে।countরিটার্ন করুন ফলাফল হিসেবে।
উদাহরণ কোড
#include <bits/stdc++.h>
using namespace std;
int ways_reach_score(int score, bool check) {
int count = 0;
if (score == 0) {
return 1;
}
if (check == false && score > 1) {
count += ways_reach_score(score - 1, false) + ways_reach_score(score - 2, true);
} else {
count += ways_reach_score(score - 1, false);
}
return count;
}
int main() {
int score = 4;
bool check = false;
cout << "১ এবং ২ দিয়ে কনসিকিউটিভ ২ ছাড়া স্কোর পৌঁছানোর পদ্ধতির সংখ্যা: " << ways_reach_score(score, check);
return 0;
}
আউটপুট
উপরোক্ত কোডটি রান করলে নিচের আউটপুটটি আসবে:
১ এবং ২ দিয়ে কনসিকিউটিভ ২ ছাড়া স্কোর পৌঁছানোর পদ্ধতির সংখ্যা: 4