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

C++에서 숫자 대체가 있는 두 숫자의 최대 및 최소 합계

<시간/>

두 개의 양수 num1과 num2가 주어집니다. 목표는 둘 다에서 숫자 교체 후 이 둘의 가능한 최소 합과 최대 합을 찾는 것입니다. 두 숫자의 각 숫자에서 숫자를 바꿀 수 있습니다. num1이 434이고 num2가 324이고 숫자 3을 4로, 숫자 4를 3으로 바꿀 수 있다고 가정합니다. 그러면 최소 합은 -333+323=656이 되고 최대 합은 444+424=864가 됩니다.

숫자 3을 4로 또는 그 반대로 바꾸는 예를 들어 이해합시다. −

입력

num1=3224 num2=4321

출력

Maximum sum is : 8645
Minimum sum is : 6544

설명 - 4가 3보다 크므로 두 숫자를 모두 더 크게 만들기 위해 모든 3을 4로 대체합니다.

num1은 4224가 되고 num2는 4421이 되고 sum은 8645입니다. 3이 4보다 작으므로 두 숫자를 모두 더 작게 만들기 위해 4를 모두 3으로 교체합니다.

num1은 3223이 되고 num2는 3321이 되고 합계는 6544가 됩니다.

입력

num1=3111 num2=4111

출력

Maximum sum is : 8222
Minimum sum is : 6222

설명 - 4가 3보다 크므로 두 숫자를 모두 더 크게 만들기 위해 모든 3을 4로 대체합니다.

num1은 4111이 되고 num2는 4111이 되고 sum은 8222입니다. 3이 4보다 작으므로 두 숫자를 모두 더 작게 만들기 위해 4를 모두 3으로 교체합니다.

num1은 3111이 되고 num2는 3111이 되고 합계는 6222가 됩니다.

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

  • 숫자는 변수 num1 및 num2에 있습니다.

  • countSum 함수( int n1,int n2)는 숫자 교체 후 숫자의 최소 및 최대 합을 계산하는 데 사용됩니다.

  • 두 개의 숫자 n1과 n2를 매개변수로 받아 minSum과 maxSum에 저장된 결과를 표시합니다.

  • 처음에는 두 숫자의 모든 4를 3으로 바꾸고 각각에 대해 replace(n1,4,3) 및 replace(n2,4,3)를 호출하여 num2와 num2에 새 값을 저장합니다.

  • 새로운 num1과 num2를 추가하여 최소 합계를 계산합니다.

  • 마찬가지로 3을 4로 바꾸기 위해 replace(n1,3,4) 및 replace(n2,3,4)를 호출하여 위의 단계를 반복하고 최대 합계를 계산합니다.

  • replace(int x,int digit1,int digit2) 함수는 x의 모든 digit1을 digit2로 바꾸고 새 숫자를 반환합니다.

  • 변수 숫자는 새로 얻은 숫자를 저장하며 0으로 초기화됩니다.

  • temp는 각 반복에 대해 승수를 10으로 저장하는 데 사용됩니다.

  • x를 10으로 나누고 나머지의 나머지를 rem에 저장하여 오른쪽에서 각 숫자를 가져옵니다.

  • rem이 digit1과 같으면 digit2로 바꿉니다. 새로운 숫자를 얻으려면 이것을 추가하십시오 =number +digit2 * temp;

  • 그렇지 않으면 변경 없음 number=number + rem*temp;

  • x를 10으로 나누어 x를 줄이고 승수를 10으로 늘립니다. (remp=temp*10)

  • 얻은 번호를 반환합니다.

예시

#include<bits/stdc++.h>
using namespace std;
//replace digit1 with digit2
int replace(int x, int digit1, int digit2){
   int number = 0;
   int temp = 1;
   while (x > 0){
      int rem = x % 10;
      // Required digit found, replace it
      if (rem == digit1)
         number = number + digit2 * temp;
      else
         number = number + rem * temp;
         temp *= 10;
         x = x / 10;
      }
      return number;
   }
   void calculateSum(int n1, int n2){
      //replace 4 by 3
      int num1=replace(n1,4,3);
      int num2=replace(n2,4,3);
      int minSum=num1+num2;
      //replace 3 by 4
      num1=replace(n1,3,4);
      num2=replace(n2,3,4);
      int maxSum=num1+num2;
      std::cout << "Minimum Sum by digit replacement: " << minSum;
      std::cout << "\nMaximum Sum by digit replacement: " << maxSum;
}
int main(){
   int num1 = 3131, num2 = 4141;
   calculateSum(num1, num2);
   return 0;
}

출력

Minimum Sum by digit replacement: 6262
Maximum Sum by digit replacement: 8282