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

সি++-এ সবচেয়ে কাছের প্যালিনড্রোম বের করা (Find the Closest Palindrome)

মনে করুন, একটি সংখ্যা n দেওয়া আছে। এর সবচেয়ে কাছের প্যালিনড্রোম সংখ্যা বের করতে হবে। প্যালিনড্রোমটি n-এর চেয়ে ছোট বা বড় হতে পারে, которомান অ্যাবসোলিউট ডিফারেন্স ন্যূনতম হবে।

যেমন, n = 145 হলে, ফলাফল ১৪১।

সমাধানের ধাপসমূহ

  • sn := n.size()
  • যদি sn == 1 হয়, n[0]-- করে স্ট্রিং রিটার্ন
  • half_sn := (sn+1)/2, half_val := stol(n.substr(0, half_sn))
  • ক্যান্ডিডেট অ্যারে: 10^sn-1, 10^(sn-1)-1, 10^(sn-1)+1, 10^sn+1
  • fmdc অ্যারে: half_val, half_val-1, half_val+1
  • প্রতিটি c ∈ fmdc এর জন্য:
    • rev := c-এর স্ট্রিং, sn বিজোড় হলে শেষ ক্যারেক্টার মুছে দিন
    • rev রিভার্স করুন, c+rev কে ক্যান্ডিডেটে যোগ করুন
  • ক্যান্ডিডেট সর্ট করুন
  • val := n ইন্টিজারে, min_diff := INT_MAX
  • প্রতিটি ক্যান্ডিডেটের জন্য:
    • যদি ক্যান্ডিডেট == val হয়, স্কিপ করুন
    • diff := |candidate - val|, যদি diff < min_diff হয়, আপডেট করুন
  • ans রিটার্ন করুন

উদাহরণ

#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++-এ BK ট্রি পরিচিতি

  2. C++ প্রোগ্রাম: ফাইল থেকে ইউনিক শব্দ প্রিন্ট করা

  3. C++-এ ফাইল ওয়ার্ড বাই ওয়ার্ড পড়া (Read File Word by Word)

  4. সমাধান: ওয়ার্ডে স্পেল চেক কাজ করছে না