k अंकों के n-वें पैलिंड्रोम को खोजने के लिए, हम पहले k अंकों की संख्या से तब तक पुनरावृति कर सकते हैं जब तक कि हमें n-th पैलिंड्रोम संख्या नहीं मिल जाती। यह दृष्टिकोण कुशल नहीं है। आप इसे स्वयं आजमा सकते हैं।
अब, k अंकों के n-वें पैलिंड्रोम को खोजने के लिए कुशल तरीका देखते हैं।
संख्या में दो भाग होते हैं। पहली छमाही दूसरी छमाही के विपरीत के बराबर है।
k अंकों वाली n-वें नंबर की पहली छमाही है
यदि k विषम है तो (n - 1) + 10 k/2 और(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