Giả sử chúng ta có một số nguyên num. Chúng tôi sẽ áp dụng các bước sau chính xác hai lần, các bước như thế -
-
Chọn một chữ số x trong phạm vi từ 0 đến 9.
-
Chọn một chữ số y khác cũng trong phạm vi từ 0 đến 9. Chữ số y có thể bằng x.
-
Thay thế tất cả các lần xuất hiện của x trong biểu diễn thập phân của num bằng y. Số nguyên mới không được có bất kỳ số 0 nào ở đầu, cũng như số nguyên mới không được có giá trị 0.
Bây giờ hãy coi a và b là kết quả của việc áp dụng các phép toán cho num lần thứ nhất và lần thứ hai. Sau đó, tìm sự khác biệt lớn nhất giữa a và b.
Vì vậy, nếu đầu vào là 555, thì đầu ra sẽ là 888 khi lần đầu tiên chọn x =5 và y =9 và lưu trữ số nguyên mới trong a. Lần thứ hai chọn x =5 và y =1 và lưu trữ số nguyên mới trong b.
Vì vậy, bây giờ chúng ta có a =999 và b =111 và hiệu số lớn nhất là =999 - 111 =888.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
Xác định một hàm getMax (), điều này sẽ lấy x,
-
s:=chuyển x thành chuỗi
-
a:='9'
-
i:=0
-
while (i
-
(tăng tôi lên 1)
-
-
nếu tôi
-
a:=s [i]
-
-
để khởi tạo i:=0, khi i
-
nếu s [i] giống với a, thì -
-
s [i]:='9'
-
-
-
trả về s dưới dạng số
-
Xác định một hàm getMin (), điều này sẽ lấy x,
-
s:=chuyển x thành chuỗi
-
nếu s [0] không bằng '1' thì -
-
a:=s [0]
-
để khởi tạo i:=0, khi i
-
nếu s [i] giống với a, thì -
-
s [i]:='1'
-
-
-
-
Nếu không
-
nếu kích thước của s bằng 1, thì -
-
trả lại 1
-
-
i:=0
-
a:='1'
-
while (i
-
(tăng tôi lên 1)
-
-
nếu tôi
-
a:=s [i]
-
-
để khởi tạo i:=1, khi i
-
nếu s [i] giống với a, thì -
-
s [i]:='0'
-
-
-
-
trả về s dưới dạng số
-
Từ phương thức chính, hãy làm như sau -
-
a:=getMax (num)
-
b:=getMin (num)
-
trả về | a - b |
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
#include <bits/stdc++.h> using namespace std; class Solution { public: int getMax(int x){ string s = to_string(x); char a = '9', b; int i = 0; while (i < s.size() && s[i] == '9') i++; if (i < s.size()) a = s[i]; for (int i = 0; i < s.size(); i++) { if (s[i] == a) { s[i] = '9'; } } return stoi(s); } int getMin(int x){ string s = to_string(x); char a; if (s[0] != '1') { a = s[0]; for (int i = 0; i < s.size(); i++) { if (s[i] == a) { s[i] = '1'; } } } else { if (s.size() == 1) { return 1; } int i = 0; a = '1'; while (i < s.size() && s[i] <= '1') i++; if (i < s.size()) a = s[i]; for (int i = 1; i < s.size(); i++) { if (s[i] == a) { s[i] = '0'; } } } return stoi(s); } int maxDiff(int num) { int a = getMax(num); int b = getMin(num); return abs(a - b); } }; main(){ Solution ob; cout << (ob.maxDiff(666)); }
Đầu vào
666
Đầu ra
888