k সংখ্যার n-ম প্যালিনড্রোম খুঁজে বের করার জন্য, আমরা n-তম প্যালিনড্রোম সংখ্যা না পাওয়া পর্যন্ত প্রথম k সংখ্যার সংখ্যা থেকে পুনরাবৃত্তি করতে পারি। এই পদ্ধতিটি কার্যকর নয়। আপনি নিজে চেষ্টা করে দেখতে পারেন।
এখন, k সংখ্যার n-তম প্যালিন্ড্রোম খুঁজে বের করার কার্যকরী পদ্ধতি দেখি।
সংখ্যা দুটি অর্ধেক আছে. প্রথমার্ধ দ্বিতীয়ার্ধের বিপরীতের সমান।
k সংখ্যা সহ n-ম সংখ্যার প্রথমার্ধ হল
k বিজোড় হলে (n - 1) + 10 k/2 else(n-1)+10 k/2-1
k সংখ্যা সহ n-ম সংখ্যার দ্বিতীয়ার্ধটি অঙ্কগুলির প্রথমার্ধের বিপরীত হবে। সংখ্যার প্রথমার্ধ থেকে শেষ অঙ্কটি ছেঁটে দিন, যদি k বিজোড় হয়।
অ্যালগরিদম
- n এবং k সংখ্যাটি শুরু করুন।
- k-এর মান ব্যবহার করে k-ডিজিটের প্যালিনড্রোমের প্রথমার্ধের দৈর্ঘ্য খুঁজুন।
- প্যালিনড্রোমের প্রথমার্ধটি হল pow(10, দৈর্ঘ্য) + n - 1।
- যদি k বিজোড় হয়, তাহলে প্যালিনড্রোমের প্রথমার্ধ থেকে শেষ অঙ্কটি সরিয়ে দিন।
- প্রথম অর্ধেক বিপরীত করুন এবং দ্বিতীয়ার্ধ প্রিন্ট করুন।
বাস্তবায়ন
C++
-এ উপরের অ্যালগরিদমের বাস্তবায়ন নিচে দেওয়া হল#include<bits/stdc++.h> using namespace std; void findNthPalindrome(int n, int k) { int temp = (k & 1) ? (k / 2) : (k / 2 - 1); int palindrome = (int)pow(10, temp); palindrome += n - 1; cout << palindrome; if (k & 1) { palindrome /= 10; } while (palindrome) { cout << palindrome % 10; palindrome /= 10; } cout << endl; } int main(){ int n = 7, k = 8; findNthPalindrome(n ,k); return 0; }
আউটপুট
আপনি যদি উপরের কোডটি চালান, তাহলে আপনি নিম্নলিখিত ফলাফল পাবেন।
10066001