কম্পিউটার

C++ এ সুন্দর আয়োজন II


ধরুন আমাদের দুটি পূর্ণসংখ্যা n এবং k আছে, আমাদের একটি তালিকা তৈরি করতে হবে যাতে 1 থেকে n পর্যন্ত বিভিন্ন ধনাত্মক পূর্ণসংখ্যা রয়েছে এবং নিম্নলিখিত নিয়মটি মেনে চলে -

বিবেচনা করুন তালিকাটি হল [a1, a2, a3, ... , an], তারপর তালিকা [|a1 - a2|, |a2 - a3|, |a3 - a4|, ... , |an-1 - an |] ঠিক k অনন্য পূর্ণসংখ্যা আছে। তাই যদি একাধিক উত্তর থাকে, তাদের যেকোনো একটি প্রদর্শন করুন।

যদি ইনপুটটি n =3 এবং k =2 এর মত হয় তবে ফলাফলটি [1,3,2] হবে। [1,3,2] এর 1 থেকে 3 পর্যন্ত তিনটি ভিন্ন ধনাত্মক পূর্ণসংখ্যা রয়েছে। এবং [2,1] এর ঠিক 2টি স্বতন্ত্র পূর্ণসংখ্যা রয়েছে 1 এবং 2।

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

  • একটি অ্যারে ret সংজ্ঞায়িত করুন
  • এর জন্য i :=1, j :=n, পরীক্ষা করুন i <=j
      কিনা
    • যদি k> 1, তারপর
      • যদি k বিজোড় হয়, তাহলে i ঢোকান অন্যথায় ret এ j ঢোকান
      • যদি k বিজোড় হয়, তাহলে i 1 দ্বারা বাড়ান, অন্যথায় j 1 দ্বারা কমিয়ে দিন
      • k কে 1 দ্বারা কমিয়ে দিন
    • অন্যথায় res-এ i ঢোকান এবং i 1 দ্বারা বাড়ান
  • রিটার্ন রিটার্ন

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

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<int> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
class Solution {
   public:
   vector<int> constructArray(int n, int k) {
      vector <int> ret;
      for(int i = 1, j = n; i <= j; ){
         if(k > 1){
            ret.push_back(k % 2 ? i : j);
            if(k % 2 == 1){
               i++;
            }else j--;
            k--;
         } else {
            ret.push_back(i++);
        }
      }
      return ret;
   }
};
main(){
   Solution ob;
   print_vector(ob.constructArray(3, 2));
}

ইনপুট

3
2

আউটপুট

[3, 1, 2, ]

  1. C++ এ রেফারেন্স_র্যাপার

  2. C++ এ এনক্যাপসুলেশন

  3. C++ এ শনাক্তকারী

  4. লিনাক্সে C++ এর সেরা IDE কি?