কম্পিউটার

C++ এ সবচেয়ে কাছের প্যালিনড্রোম খুঁজুন


ধরুন আমাদের একটি সংখ্যা n আছে, আমাদের কাছের সংখ্যাটি পেতে হবে যা প্যালিনড্রোম। সুতরাং প্যালিনড্রোম সংখ্যার চেয়ে কম বা বেশি হতে পারে যার পরম পার্থক্য ছোট। সুতরাং সংখ্যাটি 145 এর মত হলে ফলাফল 141 হবে।

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

  • sn :=n এর আকার
  • যদি sn 1 এর মত হয়, তাহলে −
    • n[0] 1 দ্বারা কমান এবং n[0] আকারের 1s এর একটি স্ট্রিং ফেরত দিন
  • half_sn :=(sn + 1) / 2
  • half_val :=stol(n এর সাবস্ট্রিং 0 থেকে অর্ধ_sn পর্যন্ত
  • একটি অ্যারে প্রার্থী সংজ্ঞায়িত করুন ={10^(sn) – 1, 10^(sn - 1) - 1, 10^(sn - 1) + 1, 10^(sn)+1
  • একটি অ্যারে সংজ্ঞায়িত করুন fmdc ={ half_val, half_val - 1, half_val + 1
  • fmds
      -এ
    • প্রতিটি মানের জন্য c
    • rev :=c স্ট্রিং এ রূপান্তর করুন
    • যদি sn mod 2 অ-শূন্য হয়, তাহলে −
      • রিভ থেকে শেষ উপাদান মুছুন
    • অ্যারে রিভার্স রিভার্স করুন
    • প্রার্থীদের শেষে c ঢোকান
  • অ্যারে প্রার্থীদের সাজান
  • val :=n পূর্ণসংখ্যা হিসাবে
  • প্রার্থীদের মধ্যে প্রতিটি প্রার্থীর জন্য -
    • যদি প্রার্থী ভ্যালের সমান হয়, তাহলে −
      • নিম্নলিখিত অংশ উপেক্ষা করুন, পরবর্তী পুনরাবৃত্তিতে যান
    • diff :=abs|প্রার্থী – ভাল|
    • যদি diff
    • মিন_ডিফ :=পার্থক্য
    • উত্তর :=প্রার্থীকে স্ট্রিং-এ রূপান্তর করুন
  • উত্তর ফেরত দিন
  • আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

    উদাহরণ

    #include <bits/stdc++.h>
    using namespace std;
    class Solution {
    public:
       string nearestPalindromic(string n) {
          int sn = n.size();
          if(sn == 1){
          return string(1, --n[0]);
       }
       int half_sn = (sn+1)/2;
       long half_val = stol(n.substr(0, half_sn));
       vector<long> candidates = {pow(10, sn)-1, pow(10, sn-1)-1, pow(10, sn-1)+1, pow(10, sn)+1};
       vector <long> fmdc = {half_val, half_val-1,half_val+1};
       for(long c:fmdc){
          string rev = to_string(c);
          if(sn%2)rev.pop_back();
          reverse(rev.begin(),rev.end());
          candidates.push_back(stol(to_string(c) + rev));
       }
       sort(candidates.begin(), candidates.end());
       string ans;
       long val = stol(n), min_diff = INT_MAX;
       for(long candidate : candidates){
          if(candidate == val)continue;
          long diff = labs(candidate - val);
          if(diff < min_diff){
             min_diff = diff;
             ans = to_string(candidate);
             }
          }
          return ans;
       }
    };
    main(){
       Solution ob;
       cout << (ob.nearestPalindromic("145"));
    }

    ইনপুট

    “145”

    আউটপুট

    141

    1. C++ এ একটি লাইনের মধ্যবিন্দু খুঁজে বের করার জন্য প্রোগ্রাম

    2. C++ এ ত্রিভুজের সেন্ট্রোয়েড খুঁজে বের করার প্রোগ্রাম

    3. C++ এ সমান্তরালগ্রামের ক্ষেত্রফল বের করার প্রোগ্রাম

    4. C++ এ একটি বাইনারি গাছের নিকটতম পাতাটি খুঁজুন