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