কম্পিউটার

বিস্ফোরিত না করে ওজন স্কেলে সোনা লোড করার অর্ডার খুঁজে পেতে C++ প্রোগ্রাম


ধরুন আমাদের একটি অ্যারে আছে n স্বতন্ত্র উপাদান সহ, এবং আরেকটি সংখ্যা x। n সোনার টুকরা আছে। সোনার ওজন হল A[i]। আমরা ওজন স্কেলে এই n টুকরা রাখব একবারে এক টুকরো। কিন্তু স্কেলটিতে একটি অস্বাভাবিক ত্রুটি রয়েছে:যদি এটির মোট ওজন ঠিক x হয় তবে এটি বিস্ফোরিত হবে। প্রক্রিয়া চলাকালীন স্কেলটি বিস্ফোরিত না করে আমরা কিছু ক্রমে সমস্ত n সোনার টুকরো স্কেলে রাখতে পারি কিনা তা আমাদের পরীক্ষা করতে হবে। যদি আমরা পারি, সেই আদেশটি খুঁজে বের করুন। যদি সম্ভব না হয়, "অসম্ভব" চিহ্নিত করুন।

সুতরাং, যদি ইনপুটটি A =[1, 2, 3, 4, 8] এর মত হয়; x =6, তাহলে আউটপুট হবে [8, 1, 2, 3, 4], অন্যান্য অর্ডারগুলিও বৈধ

পদক্ষেপ

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

s := 0
n := size of A
for initialize i := 0, when i < n, update (increase i by 1), do:
   s := s + A[i]
if s is same as x, then:
   return "IMPOSSIBLE"
s := 0
for initialize i := 0, when i < n, update (increase i by 1), do:
   s := s + A[i]
   if s is same as x, then:
      print A[i + 1], A[i]
      (increase i by 1)
      Ignore following part, skip to the next iteration
   print A[i]
এ যান

উদাহরণ

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

#include <bits/stdc++.h>
using namespace std;

void solve(vector<int> A, int x) {
   int s = 0;
   int n = A.size();
   for (int i = 0; i < n; i++) {
      s += A[i];
   }
   if (s == x) {
      cout << "IMPOSSIBLE";
      return;
   }
   s = 0;
   for (int i = 0; i < n; i++) {
      s += A[i];
      if (s == x) {
         cout << A[i + 1] << ", " << A[i] << ", ";
         i++;
         continue;
      }
      cout << A[i] << ", ";
   }
}
int main() {
   vector<int> A = { 1, 2, 3, 4, 8 };
   int x = 6;
   solve(A, x);
}

ইনপুট

{ 1, 2, 3, 4, 8 }, 6

আউটপুট

1, 2, 4, 3, 8,

  1. LCM খুঁজে পেতে C++ প্রোগ্রাম

  2. GCD খুঁজে পেতে C++ প্রোগ্রাম

  3. ফ্যাক্টরিয়াল খুঁজে পেতে C++ প্রোগ্রাম

  4. C++ এ পরিদর্শন করা শহরগুলির সঠিক ক্রম খুঁজে বের করার প্রোগ্রাম