สมมติว่าเรามีตัวเลข n หลัก เราต้องหาจำนวนสูงสุดที่สามารถรับได้โดยใช้ตัวเลขทั้งหมดของตัวเลขนั้น ดังนั้นหากตัวเลขคือ 339625 จำนวนสูงสุดคือ 965332
จากปัญหาจะเห็นว่าเราสามารถเรียงลำดับตัวเลขง่ายๆ แบบไม่เพิ่มขึ้นแล้วพิมพ์ออกมาได้ แต่เราสามารถแก้ปัญหานี้ได้โดยใช้วิธีที่มีประสิทธิภาพมากขึ้น เราสามารถสร้างอาร์เรย์ขนาด 10 ขึ้นมาหนึ่งชุดเพื่อเก็บความถี่ของแต่ละหลัก จากนั้นพิมพ์ตัวเลขตั้งแต่ 9 ถึง 0 ตามลำดับ
ตัวอย่าง
#include <iostream> #include <string> using namespace std; int maxNumFromNum(int num) { int freq[10] = {0}; string str = to_string(num); for (int i=0; i<str.length(); i++) freq[str[i]-'0']++; int res = 0, mul = 1; for (int i = 0; i <= 9; i++) { while (freq[i] > 0) { res = res + (i * mul); freq[i]--; mul = mul * 10; } } return res; } int main() { int num = 339625; cout << "Maximum number: " << maxNumFromNum(num); }
ผลลัพธ์
Maximum number: 965332