สมมุติว่าเรามีเลข n, เราต้องหาจำนวนที่ใกล้เคียงที่สุดและเล็กกว่าของ n ตัวเลขจึงเรียกว่า เลขเป็นระเบียบ ถ้าตัวเลขทั้งหมดเรียงตามลำดับที่ไม่ลดลง ดังนั้นหากตัวเลขคือ 45000 ตัวเลขที่ใกล้เคียงที่สุดและเล็กกว่าจะเป็น 44999
เพื่อแก้ปัญหานี้ เราจะสำรวจตัวเลขจากจุดสิ้นสุด เมื่อทรัพย์สินที่เป็นระเบียบเรียบร้อยถูกละเมิด จากนั้นเราจะลดหลักลง 1 และทำให้หลักต่อมาทั้งหมดเป็น 9
ตัวอย่าง
#include<iostream> using namespace std; string tidyNum(string number) { for (int i = number.length()-2; i >= 0; i--) { if (number[i] > number[i+1]) { number[i]--; for (int j=i+1; j<number.length(); j++) number[j] = '9'; } } return number; } int main() { string str = "45000"; string num = tidyNum(str); cout << "The tidy number is: " << num; }
ผลลัพธ์
The tidy number is: 44999