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