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

Tối đa hóa giá trị của A bằng cách thay thế một số chữ số của nó bằng các chữ số của B trong C ++


Nhiệm vụ là tối đa hóa giá trị của số A bằng cách thay thế một số chữ số của nó bằng các chữ số có trong một số khác B. Không có chữ số nào được thay thế nếu giá trị của A không thể lớn nhất.

Lưu ý - một chữ số từ B chỉ có thể được sử dụng một lần.

Bây giờ chúng ta hãy hiểu những gì chúng ta phải làm bằng cách sử dụng một ví dụ -

Đầu vào

A = “1221”
B = “1211”

Đầu ra

Maximum value of A possible 2221

Giải thích - Ở đây chúng tôi chọn 2 từ B và thay thế nó bằng 1 đầu tiên của A. Đây là lựa chọn duy nhất vì việc thay thế bất kỳ chữ số nào khác của A bằng 2 hoặc 1 sẽ không làm tăng giá trị của nó.

Đầu vào

A = “1002”
B = “3200”

Đầu ra

Maximum value of A possible 3202

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Mỗi chữ số trong A sẽ được thay thế bằng một chữ số B nếu nó nhỏ hơn chữ B.

  • Sắp xếp chuỗi B theo thứ tự tăng dần.

  • Bắt đầu đi ngang A từ bên trái.

  • Bây giờ đi ngang qua B từ bên phải.

  • Thay chữ số ở A bằng chữ số B nếu nó nhỏ hơn và con trỏ tăng dần tại A và con trỏ giảm tại B.

Ví dụ

#include <bits/stdc++.h>
using namespace std;
// Function to return the maximized value of a
string valueup(string str1, string str2){
   // Sort digits in ascending order
   sort(str2.begin(), str2.end());
   int len1 = str1.length();
   int len2 = str2.length();
   int j = len2 - 1;
   for (int i = 0; i < len1; i++) {
      // If all the digits of b consumed
      if (j < 0)
         break;
      if (str2[j] > str1[i]) {
         str1[i] = str2[j];
         j--; //once digit used
      }
   }
   return str1;
}
// Driver code
int main(){
   string a = "1204";
   string b = "4521";
   cout << valueup(a, b);
   return 0;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, chúng ta sẽ nhận được kết quả sau -

5424