কম্পিউটার টিউটোরিয়াল

সি++ প্রোগ্রাম: দত্তক ağırlık দিয়ে প্যান ব্যালেন্স করা (ভেরিয়েন্ট: ভেরিয়েন্ট অফ আ 넘্বর)


বিবৃতি: একটি সংখ্যার ঘাতের रूपে দেওয়া ওজন দিয়ে প্যান ব্যালেন্স করা।

বিবরণ: এই সমস্যায় একটি প্যান-ভিত্তিক ওজন মাপা মেশিন দেওয়া আছে। একটি ওজন T এবং কিছু অন্যান্য ওজন দেওয়া আছে যাদের মান একটি সংখ্যা a-র ঘাত। দত্ত ওজনগুলো দিয়ে প্যান দুটো ব্যালেন্স করতে হবে।

এইভাবেই আমরা একটি সমীকরণ পাই:

T + (a-এর কিছু ঘাত) = (a-এর অন্য কিছু ঘাত)

মনে রাখতে হবে প্রতিটি ঘাতের মানের জন্য ঠিক একটি ওজন রয়েছে।

উদাহরণ:

T = 12 : a = 4

নিচের মানগুলো দিয়ে ওজন ব্যালেন্স করা যায়:

12 + 4 = 16

এই সমস্যা সমাধানের জন্য T কে a-এর ঘাত হিসেবে প্রকাশ করতে হবে। এর জন্য T-এর বেস ১০ থেকে a-তে পরিবর্তন করা হবে।

CASE ১: বেস পরিবর্তন করলে যদি রিপ্রেজেন্টেশনে শুধু ১ এবং ০ থাকে। তখন ১-গুলোর ওজনগুলো যোগ করেই T-এর মান তৈরি করা যায়।

উদাহরণ:

T = 10 : a = 3,

১০ কে বেস ৩-এ রূপান্তর করলে ১০১ হয়। তাই ৩0 এবং ৩2 (১ + ৯) = ১০ দিয়ে ব্যালেন্স করা যাবে।

CASE ২: বেস পরিবর্তন করলে যদি ১ এবং ০ ছাড়া অন্য মান থাকে। এখানে বাধ্যতামূলক শর্ত হলো বেস রিপ্রেজেন্টেশনে (a - 1) মান থাকতে হবে। এই কেসে, সেই ঘাতের ওজনটি T-এর পাশে সরিয়ে দিতে হবে এবং বেস রিপ্রেজেন্টেশনের সংখ্যাকে ১ বাড়াতে হবে।

উদাহরণ:

T = 7 : a = 3

৭ কে বেস ৩-এ রূপান্তর করলে ০২১ পাওয়া যায়। ৩1 T-এর পাশে সরিয়ে এবং অন্য পাশে ১ বাড়িয়ে সংখ্যা হয় ১০ যেটি ১০১ হিসেবে প্রকাশিত (৯ + ১)। যা ব্যালেন্স করা সম্ভব।

উপরের কেসগুলো ভিত্তি করে সমস্যা সমাধানের প্রোগ্রাম বানানো যাক।

উদাহরণ

#include <bits/stdc++.h> using namespace std; bool isBalancePossible(int T, int a){    vector<int> baseForm;    while (T) {       baseForm.push_back(T % a);       T /= a;    }    baseForm.push_back(0);    for (int i = 0; i < baseForm.size(); i++) {       if (baseForm[i] != 0 && baseForm[i] != 1 &&       baseForm[i] != (a - 1) && baseForm[i] != a)       return false;    if (baseForm[i] == a || baseForm[i] == (a - 1))       baseForm[i + 1] += 1;    }    return true; } int main(){    int T = 21;    int a = 4;    if (isBalancePossible(T, a))       cout << "Balance is possible" << endl;    else       cout << "Balance is not possible" << endl;    return 0; }

আউটপুট

Balance is possible

  1. C++ প্রোগ্রাম: স্ট্যাক ব্যবহার করে ডেসিমাল নম্বরকে বাইনারি নম্বরে কনভার্ট করা

  2. C++-এ দেওয়া সংখ্যার ডিজিটগুলোর যোগফল বের করা

  3. রিকার্সন ব্যবহার করে সংখ্যার ফ্যাক্টোরিয়াল বের করার C++ প্রোগ্রাম

  4. ইটারেশন (Iteration) ব্যবহার করে ফ্যাক্টোরিয়াল বের করার C++ প্রোগ্রাম