ในการหา palindrome ที่ n ของ k หลัก เราสามารถวนซ้ำจากตัวเลข k หลักแรกจนพบ palindrome number ที่ n วิธีนี้ไม่ได้ผล คุณสามารถลองด้วยตัวคุณเอง
ทีนี้ มาดูวิธีที่มีประสิทธิภาพในการหาพาลินโดรมที่ n ของหลัก k กัน
มีสองส่วนในตัวเลข ครึ่งแรกเท่ากับครึ่งหลังของครึ่งหลัง
เลขครึ่งแรกของตัวที่ n มีหลัก k คือ
ถ้า k เป็นเลขคี่ ดังนั้น (n - 1) + 10 k/2 อื่น(n-1)+10 k/2-1
เลขครึ่งหลังของเลข n-th ที่มี k หลักจะกลับด้านของเลขครึ่งแรก ตัดหลักสุดท้ายจากครึ่งแรกของตัวเลข ถ้า 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