Open In App

Maximum and minimum sums from two numbers with digit replacements

Last Updated : 23 Jul, 2025
Comments
Improve
Suggest changes
Like Article
Like
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)


 


Practice Tags :

Similar Reads