Computer >> Máy Tính >  >> Lập trình >> C ++

Sự khác biệt tối đa bạn có thể nhận được khi thay đổi số nguyên trong C ++

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