এই সমস্যায়, আমাদের তিনটি ইন্টিজার মান A, B এবং T দেওয়া হয়েছে। আমাদের কাজ হলো দুটি ইন্টিজারের সাথে ইভেন-অড টার্ন গেম খেলার প্রোগ্রাম তৈরি করা।
দুটি ইন্টিজার মান হলো:
T, যা গেমের টার্নের সংখ্যা নির্দেশ করে।
A হলো প্লেয়ার ১-এর মান
B হলো প্লেয়ার ২-এর মান
যদি T-এর মান বিজোড় হয়, তবে A-এর মান ২ দিয়ে গুণিত হবে।
যদি T-এর মান জোড় হয়, তবে B-এর মান ২ দিয়ে গুণিত হবে।
আমাদের শেষে max(A, B) / min(A, B) এর মান বের করতে হবে।
উদাহরণ দিয়ে সমস্যাটি বোঝা যাক
ইনপুট: A = 3, B = 4, T = 3
আউটপুট: 1
ব্যাখ্যা:
১ম টার্ন: T বিজোড়, A ২ দিয়ে গুণিত, A = 6।
২য় টার্ন: T জোড়, B ২ দিয়ে গুণিত, B = 8।
৩য় টার্ন: T বিজোড়, A ২ দিয়ে গুণিত, A = 12।
A = 12 B = 4
max(A, B) = max(12, 4) = 12
min(A, B) = min(12, 4) = 4
max(A, B) / min(A, B) = 12 / 8 = 1
সমাধানের পদ্ধতি
এই সমস্যার একটি সহজ সমাধান হবে T টার্নের পর A এবং B-এর মান ক্যালকুলেট করে max(A, B) / min(A, B) রিটার্ন করা। এটি T ইটারেশন নেয় একটি কার্যকর সমাধান।
কিন্তু একটি আরও কার্যকর সমাধান সম্ভব এই ফ্যাক্টের ভিত্তিতে যে জোড় মান T-এর জন্য, নতুন A হলো N*A এবং নতুন B হলো N*B।
এটি max(A, B) / min(A, B)-কে একটি কনস্ট্যান্ট বানায় দেয় যেটি সমান max(A, B) / min(A, B)।
যদি T-এর মান বিজোড় হয়, তবে A-এর মান হবে 2*N*A এবং B-এর মান N*B।
এটি max(A, B) / min(A, B)-কে একটি কনস্ট্যান্ট বানায় যেটি সমান max(2A, B) / min(2A, B)।
সমস্যার ফলাফল max(A, B) / min(A, B) =
max(A, B) / min(A, B), যদি T জোড় হয়
max(2A, B) / min(2A, B), যদি T বিজোড় হয়
সমাধানটি ব্যাখ্যা করে প্রোগ্রাম
#include <iostream>
using namespace std;
int EvenOddGame(int A, int B, int T) {
if (T % 2 == 0)
return (max(A, B) / min(A, B));
else
return (max(2 * A, B) / min(2 * A, B));
return -1;
}
int main() {
int A = 3, B = 2, T = 3;
cout << "The return value of even odd game is " << EvenOddGame(A, B, T);
}
আউটপুট
The return value of even odd game is 3