Open In App

Maximum and minimum sums from two numbers with digit replacements

Last Updated : 14 Dec, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

Given two positive numbers calculate the minimum and maximum possible sums of two numbers. We are allowed to replace digit 5 with digit 6 and vice versa in either or both the given numbers.
Examples : 
 

Input  : x1 = 645 x2 = 666
Output : Minimum Sum: 1100 (545 + 555)
         Maximum Sum: 1312 (646 + 666)

Input: x1 = 5466 x2 = 4555
Output: Minimum sum: 10010
        Maximum Sum: 11132

 

Recommended Practice

Since both numbers are positive, we always get maximum sum if replace 5 with 6 in both numbers. And we get a minimum sum if we replace 6 with 5 in both numbers. Below is C++ implementation based on this fact.
 

C++




// C++ program to find maximum and minimum
// possible sums of two numbers that we can
// get if replacing digit from 5 to 6 and vice
// versa are allowed.
#include<bits/stdc++.h>
using namespace std;
 
// Find new value of x after replacing digit
// "from" to "to"
int replaceDig(int x, int from, int to)
{
    int result = 0;
    int multiply = 1;
 
    while (x > 0)
    {
        int reminder = x % 10;
 
        // Required digit found, replace it
        if (reminder == from)
            result = result + to * multiply;
 
        else
            result = result + reminder * multiply;
 
        multiply *= 10;
        x = x / 10;
    }
    return result;
}
 
// Returns maximum and minimum possible sums of
// x1 and x2 if digit replacements are allowed.
void calculateMinMaxSum(int x1, int x2)
{
    // We always get minimum sum if we replace
    // 6 with 5.
    int minSum = replaceDig(x1, 6, 5) +
                 replaceDig(x2, 6, 5);
 
    // We always get maximum sum if we replace
    // 5 with 6.
    int maxSum = replaceDig(x1, 5, 6) +
                 replaceDig(x2, 5, 6);
    cout << "Minimum sum = " << minSum;
    cout << "\nMaximum sum = " << maxSum;
}
 
// Driver code
int main()
{
    int x1 = 5466, x2 = 4555;
    calculateMinMaxSum(x1, x2);
    return 0;
}


Java




// Java program to find maximum and minimum
// possible sums of two numbers that we can
// get if replacing digit from 5 to 6 and vice
// versa are allowed.
import java.io.*;
class GFG {
     
    // Find new value of x after replacing digit
    // "from" to "to"
    static int replaceDig(int x, int from, int to)
    {
         
        int result = 0;
        int multiply = 1;
     
        while (x > 0)
        {
            int reminder = x % 10;
     
            // Required digit found, replace it
            if (reminder == from)
                result = result + to * multiply;
     
            else
                result = result + reminder * multiply;
     
            multiply *= 10;
            x = x / 10;
        }
        return result;
    }
     
    // Returns maximum and minimum possible sums of
    // x1 and x2 if digit replacements are allowed.
    static void calculateMinMaxSum(int x1, int x2)
    {
         
        // We always get minimum sum if we replace
        // 6 with 5.
        int minSum = replaceDig(x1, 6, 5) +
                    replaceDig(x2, 6, 5);
     
        // We always get maximum sum if we replace
        // 5 with 6.
        int maxSum = replaceDig(x1, 5, 6) +
                    replaceDig(x2, 5, 6);
        System.out.print("Minimum sum = " + minSum);
        System.out.print("\nMaximum sum = " + maxSum);
    }
     
    // Driver code
    public static void main (String[] args)
    {
        int x1 = 5466, x2 = 4555;
        calculateMinMaxSum(x1, x2);
    }
}
  
// This code is contributed by Anant Agarwal.


Python3




# Python3 program to find maximum
# and minimum possible sums of
# two numbers that we can get if
# replacing digit from 5 to 6
# and vice versa are allowed.
 
 
# Find new value of x after
# replacing digit "from" to "to"
def replaceDig(x, from1, to):
    result = 0
    multiply = 1
 
    while (x > 0):
        reminder = x % 10
 
        # Required digit found,
        # replace it
        if (reminder == from1):
            result = result + to * multiply
 
        else:
            result = result + reminder * multiply
 
        multiply *= 10
        x = int(x / 10)
    return result
 
# Returns maximum and minimum
# possible sums of x1 and x2
# if digit replacements are allowed.
def calculateMinMaxSum(x1, x2):
     
    # We always get minimum sum
    # if we replace 6 with 5.
    minSum = replaceDig(x1, 6, 5) +replaceDig(x2, 6, 5)
 
    # We always get maximum sum
    # if we replace 5 with 6.
    maxSum = replaceDig(x1, 5, 6) +replaceDig(x2, 5, 6)
    print("Minimum sum =" , minSum)
    print("Maximum sum =" , maxSum,end=" ")
 
# Driver code
if __name__=='__main__':
    x1 = 5466
    x2 = 4555
    calculateMinMaxSum(x1, x2)
 
# This code is contributed
# by mits


C#




// C# program to find maximum and minimum
// possible sums of two numbers that we can
// get if replacing digit from 5 to 6 and vice
// versa are allowed.
using System;
 
class GFG {
     
    // Find new value of x after
    // replacing digit "from" to "to"
    static int replaceDig(int x, int from,
                                 int to)
    {
        int result = 0;
        int multiply = 1;
     
        while (x > 0)
        {
            int reminder = x % 10;
     
            // Required digit found,
            // replace it
            if (reminder == from)
                result = result + to * multiply;
     
            else
                result = result + reminder * multiply;
     
            multiply *= 10;
            x = x / 10;
        }
        return result;
    }
     
    // Returns maximum and minimum
    // possible sums of x1 and x2
    // if digit replacements are allowed.
    static void calculateMinMaxSum(int x1, int x2)
    {
         
        // We always get minimum sum if
        // we replace 6 with 5.
        int minSum = replaceDig(x1, 6, 5) +
                     replaceDig(x2, 6, 5);
     
        // We always get maximum sum if
        //  we replace 5 with 6.
        int maxSum = replaceDig(x1, 5, 6) +
                       replaceDig(x2, 5, 6);
        Console.Write("Minimum sum = " + minSum);
        Console.Write("\nMaximum sum = " + maxSum);
    }
     
    // Driver code
    public static void Main ()
    {
        int x1 = 5466, x2 = 4555;
        calculateMinMaxSum(x1, x2);
    }
}
 
// This code is contributed by Nitin Mittal.


PHP




<?php
// PHP program to find maximum
// and minimum possible sums of
// two numbers that we can get if
// replacing digit from 5 to 6
// and vice versa are allowed.
 
 
// Find new value of x after
// replacing digit "from" to "to"
function replaceDig($x, $from, $to)
{
    $result = 0;
    $multiply = 1;
 
    while ($x > 0)
    {
        $reminder = $x % 10;
 
        // Required digit found,
        // replace it
        if ($reminder == $from)
            $result = $result + $to *
                           $multiply;
 
        else
            $result = $result +
                      $reminder *
                      $multiply;
 
        $multiply *= 10;
        $x = $x / 10;
    }
    return $result;
}
 
// Returns maximum and minimum
// possible sums of x1 and x2
// if digit replacements are allowed.
function calculateMinMaxSum($x1, $x2)
{
    // We always get minimum sum
    // if we replace 6 with 5.
$minSum = replaceDig($x1, 6, 5) +
           replaceDig($x2, 6, 5);
 
    // We always get maximum sum
    // if we replace 5 with 6.
    $maxSum = replaceDig($x1, 5, 6) +
               replaceDig($x2, 5, 6);
    echo "Minimum sum = " , $minSum,"\n";
    echo "Maximum sum = " , $maxSum;
}
 
// Driver code
$x1 = 5466; $x2 = 4555;
calculateMinMaxSum($x1, $x2);
 
// This code is contributed
// by nitin mittal.
?>


Javascript




<script>
 
// Javascript program to find maximum and minimum
// possible sums of two numbers that we can
// get if replacing digit from 5 to 6 and vice
// versa are allowed.
 
     
// Find new value of x after replacing digit
// "from" to "to"
function replaceDig(x , from , to)
{
     
    var result = 0;
    var multiply = 1;
 
    while (x > 0)
    {
        var reminder = x % 10;
 
        // Required digit found, replace it
        if (reminder == from)
            result = result + to * multiply;
 
        else
            result = result + reminder * multiply;
 
        multiply *= 10;
        x = parseInt(x / 10);
    }
    return result;
}
 
// Returns maximum and minimum possible sums of
// x1 and x2 if digit replacements are allowed.
function calculateMinMaxSum(x1 , x2)
{
     
    // We always get minimum sum if we replace
    // 6 with 5.
    var minSum = replaceDig(x1, 6, 5) +
                replaceDig(x2, 6, 5);
 
    // We always get maximum sum if we replace
    // 5 with 6.
    var maxSum = replaceDig(x1, 5, 6) +
                replaceDig(x2, 5, 6);
    document.write("Minimum sum = " + minSum);
    document.write("<br>Maximum sum = " + maxSum);
}
 
// Driver code
var x1 = 5466, x2 = 4555;
calculateMinMaxSum(x1, x2);
 
// This code contributed by shikhasingrajput
 
</script>


Output

Minimum sum = 10010
Maximum sum = 11132

Time complexity : O(logn) 
Auxiliary Space : O(1)

 



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads