Trong bài toán này, chúng ta được cho một số n. Nhiệm vụ của chúng ta là in ra số lớn nhất nhỏ hơn n sao cho tất cả các chữ số của nó đều khác biệt.
Hãy lấy một ví dụ để hiểu vấn đề
Input: n = 2332 Output: 2319
Để giải quyết vấn đề này, chúng ta đảo ngược số đếm, tức là từ n thành 0. Và kiểm tra số có các chữ số khác nhau, nếu các giá trị đếm hiện tại thỏa mãn điều kiện thì in ra và kết thúc vòng lặp. Nếu không, hãy tiếp tục lặp lại. Số lần tối đa vòng lặp sẽ chạy luôn nhỏ hơn n.
Ví dụ
Chương trình thực hiện các giải pháp của chúng tôi,
#include <bits/stdc++.h> using namespace std; int findDistinctDigitNumber(int n) { for (int i = n - 1; i>=0 ; i--) { int count[10] = { 0 }; int x = i; int count1 = 0, count2 = 0; while (x) { count[x % 10]++; x /= 10; count1++; } for (int j = 0; j < 10; j++) { if (count[j] == 1) count2++; } if (count1 == count2) return i; } } int main() { int n = 44324; cout<<"Number less than "<<n<<" with all digits distinct are : "<<findDistinctDigitNumber(n); return 0; }
Đầu ra
Number less than 44324 with all digits distinct are : 43987