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