কম্পিউটার

C++ এ সর্বাধিক 1টি অদলবদল ব্যবহার করে নির্দিষ্ট পয়েন্টের সর্বাধিক সংখ্যা


সমস্যা বিবৃতি

0 থেকে N-1 পর্যন্ত N উপাদানগুলির একটি স্থানান্তর দেওয়া হয়েছে। একটি স্থির বিন্দু হল একটি সূচক যেখানে মানটি সূচকের সমান যেমন arr[i] =i। আপনি সর্বোচ্চ 1টি অদলবদল করতে পারবেন। আপনি পেতে পারেন এমন সর্বোচ্চ সংখ্যক নির্দিষ্ট পয়েন্ট খুঁজুন।

উদাহরণ

যদি ইনপুট অ্যারে হয় {0, 1, 2, 3, 4, 6, 5} তাহলে উত্তর হল 7৷

  • স্থির বিন্দু সামঞ্জস্য করতে, আমাদের 6 এবং 5 অদলবদল করতে হবে
  • এর পরে সম্পূর্ণ অ্যারে ফিক্সড পয়েন্ট হয়ে যায় এবং ফিক্সড পয়েন্টের সর্বোচ্চ মান 7 হয়।

অ্যালগরিদম

  • একটি অ্যারে পোস তৈরি করুন যা ইনপুট অ্যারেতে প্রতিটি উপাদানের অবস্থান রাখে
  • এখন, আমরা অ্যারেটি ট্র্যাভার্স করি এবং নিম্নলিখিত ক্ষেত্রে রয়েছে −
    • যদি, a[i] =i. আমরা কেবল গণনা বৃদ্ধি করতে পারি এবং এগিয়ে যেতে পারি
    • যদি, pos[i] =a[i] যার মানে হল 2টি পদ অদলবদল করলে i এবং a[i] স্থির বিন্দু হবে, তাই গণনা 2 দ্বারা বৃদ্ধি পাবে। মনে রাখবেন যে অদলবদল সর্বাধিক একবার করা যেতে পারে .
  • ট্র্যাভার্সালের শেষে, যদি আমরা কোনো অদলবদল না করে থাকি, তাহলে এর মানে হল যে আমাদের সোয়াপ 2 দ্বারা গণনা বাড়াতে সক্ষম হয়নি, তাই এখন যদি অন্তত 2টি উপাদান থাকে যা নির্দিষ্ট বিন্দু নয়, আমরা করতে পারি গণনা 1 দ্বারা বৃদ্ধি করার জন্য একটি অদলবদল করুন, অর্থাৎ এই পয়েন্টগুলির একটিকে একটি নির্দিষ্ট বিন্দুতে পরিণত করুন৷

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
int getMaximumFixedPoints(int arr[], int n) {
   int i, pos[n], count = 0, swapped = 0;
   for (i = 0; i < n; i++)
   pos[arr[i]] = i;
   for (i = 0; i < n; i++) {
      if (arr[i] == i) {
         count++;
      } else if (swapped == 0 && pos[i] == arr[i]) {
         count += 2;
         swapped = 1;
      }
   }
   if (swapped == 0 && count < n - 1) {
      count++;
   }
   return count;
}
int main() {
   int arr[] = {0, 1, 2, 3, 4, 6, 5};
   int n = sizeof(arr) / sizeof(arr[0]);
   cout << "Maximum value of fixed point = " << getMaximumFixedPoints(arr, n) << endl;
   return 0;
}

আউটপুট

আপনি যখন উপরের প্রোগ্রামটি কম্পাইল এবং এক্সিকিউট করবেন। এটি নিম্নলিখিত আউটপুট −

তৈরি করে
Maximum edges = 7

  1. C++ ব্যবহার করে প্রদত্ত বিন্দু থেকে সম্ভাব্য চতুর্ভুজের সংখ্যা নির্ণয় করুন

  2. সর্বাধিক সংখ্যা যা C++ এ N সেগমেন্ট ব্যবহার করে সেভেন সেগমেন্ট ডিসপ্লেতে প্রদর্শিত হতে পারে

  3. C++ এ 1 থেকে n পর্যন্ত K সংখ্যা ব্যবহার করে সর্বাধিক XOR

  4. C++ ব্যবহার করে XORকে সর্বোচ্চ করতে ন্যূনতম সংখ্যক উপাদান সরাতে হবে।