Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 A의 일부 자릿수를 B의 자릿수로 대체하여 A의 값을 최대화합니다.


작업은 숫자 A의 일부를 다른 숫자 B에 있는 숫자로 대체하여 숫자 A의 가치를 최대화하는 것입니다. A의 값을 최대화할 수 없는 경우 숫자는 대체되지 않습니다.

참고 - B의 숫자는 한 번만 사용할 수 있습니다.

이제 예제를 사용하여 무엇을 해야 하는지 이해합시다 -

입력

A = “1221”
B = “1211”

출력

Maximum value of A possible 2221

설명 − 여기에서 B에서 2를 선택하고 A의 첫 번째 1로 바꿉니다. 여기에서는 A의 다른 숫자를 2 또는 1로 바꿔도 값이 증가하지 않으므로 여기에서 유일한 선택입니다.

입력

A = “1002”
B = “3200”

출력

Maximum value of A possible 3202

아래 프로그램에서 사용하는 접근 방식은 다음과 같습니다.

  • A의 각 숫자는 B의 숫자보다 작으면 B의 숫자로 대체됩니다.

  • 문자열 B를 오름차순으로 정렬합니다.

  • 왼쪽에서 A 횡단을 시작합니다.

  • 이제 오른쪽에서 B를 횡단합니다.

  • A의 숫자가 더 작으면 B의 숫자로 바꾸고 A에서 포인터를 증가시키고 B에서 포인터를 감소시킵니다.

#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;
}

출력

위의 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다 -

5424