Giả sử chúng ta có một số n chữ số. Chúng ta phải tìm số lớn nhất có thể nhận được khi sử dụng tất cả các chữ số của số đó. Vì vậy, nếu số được nói là 339625, thì số tối đa có thể là 965332.
Từ bài toán, chúng ta có thể dễ dàng sắp xếp các chữ số theo thứ tự không tăng dần, sau đó in ra. Nhưng chúng ta có thể giải quyết vấn đề này bằng cách hiệu quả hơn. Chúng ta có thể tạo một mảng có kích thước 10 để lưu trữ tần số của mỗi chữ số, sau đó in các số từ 9 đến 0 tương ứng.
Ví dụ
#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); }
Đầu ra
Maximum number: 965332