Open In App

Count three-digit numbers having difference X with its reverse

Last Updated : 28 Apr, 2021
Summarize
Comments
Improve
Suggest changes
Share
Like Article
Like
Report

Given an integer X, the task is to count the total number of three-digit numbers having difference X with its reverse. If no such number exists, then print -1.

Examples: 

Input: X = 792
Output : 10
Explanation :
901 - 109 = 792
911 - 119 = 792
921 - 129 = 792
931 - 139 = 792
941 - 149 = 792
951 - 159 = 792
961 - 169 = 792
971 - 179 = 792
981 - 189 = 792
991 - 199 = 792

Input: X = 0
Output: 90

Approach: The given problem can be solved based on the following observations:

Let N = rpq 
Therefore, N = 100r + 10q + p 
Therefore, reverse of N = 100p + 10q + r 
Therefore, the problem reduces to solving (100r + 10q + p) – (r + 10q + 100p) = X 
-> 99(r – p) = X 
-> r - p = X / 99
Therefore, if given X is a multiple of 99, then solution exists. 
 

Follow the steps below to solve the problem based on the above observations: 

  • Check if X is multiple of 99 or not. If not found to be true, print -1 as no solution exists.
  • Otherwise, calculate X / 99. Generate all pairs using digits [1, 9] and for each pair, check if their difference is equal to X / 99 or not.
  • If found to be true for any pair, increase count by 10, as the middle digit can be permuted to place any value from the range [0, 9] for the obtained pair.
  • Finally, print the value of the count obtained.

Below is the implementation of the above approach: 

C++
// C++ Program to implement
// the above approach

#include <bits/stdc++.h>
using namespace std;

// Function to count three-digit
// numbers having difference x
// with its reverse
int Count_Number(int x)
{
    int ans = 0;

    // if x is not multiple of 99
    if (x % 99 != 0) {

        // No solution exists
        ans = -1;
    }
    else {

        int diff = x / 99;

        // Generate all possible pairs
        // of digits [1, 9]
        for (int i = 1; i < 10; i++) {
            for (int j = 1; j < 10; j++) {

                // If any pair is obtained
                // with difference x / 99
                if ((i - j) == diff) {

                    // Increase count
                    ans += 10;
                }
            }
        }
    }

    // Return the count
    return ans;
}

// Driver Code
int main()
{
    int x = 792;
    cout << Count_Number(x) << endl;

    return 0;
}
Java
// Java program to implement 
// the above approach 
import java.io.*;
import java.util.Arrays; 

class GFG{
 
// Function to count three-digit 
// numbers having difference x 
// with its reverse 
static int Count_Number(int x) 
{ 
    int ans = 0; 
  
    // If x is not multiple of 99 
    if (x % 99 != 0)
    { 
        
        // No solution exists 
        ans = -1; 
    } 
    else 
    { 
        int diff = x / 99; 
  
        // Generate all possible pairs 
        // of digits [1, 9] 
        for(int i = 1; i < 10; i++) 
        { 
            for(int j = 1; j < 10; j++) 
            { 
                
                // If any pair is obtained 
                // with difference x / 99 
                if ((i - j) == diff) 
                { 
                    
                    // Increase count 
                    ans += 10; 
                } 
            } 
        } 
    } 
    
    // Return the count 
    return ans; 
} 
 
// Driver Code
public static void main (String[] args)
{
    int x = 792; 
    
    System.out.println(Count_Number(x));
}
}

// This code is contributed by sanjoy_62
Python3
# Python3 program to implement
# the above approach

# Function to count three-digit
# numbers having difference x
# with its reverse
def Count_Number(x):
  
    ans = 0;

    # If x is not multiple 
    # of 99
    if (x % 99 != 0):

        # No solution exists
        ans = -1;
    else:
        diff = x / 99;

        # Generate all possible pairs
        # of digits [1, 9]
        for i in range(1, 10):
            for j in range(1, 10):

                # If any pair is obtained
                # with difference x / 99
                if ((i - j) == diff):
                    # Increase count
                    ans += 10;

    # Return the count
    return ans;

# Driver Code
if __name__ == '__main__':
  
    x = 792;
    print(Count_Number(x));

# This code is contributed by shikhasingrajput 
C#
// C# program to implement
// the above approach  
using System;

class GFG{ 
 
// Function to count three-digit 
// numbers having difference x 
// with its reverse 
static int Count_Number(int x) 
{ 
    int ans = 0; 
   
    // If x is not multiple of 99 
    if (x % 99 != 0)
    { 
        
        // No solution exists 
        ans = -1; 
    } 
    else
    { 
        int diff = x / 99; 
   
        // Generate all possible pairs 
        // of digits [1, 9] 
        for(int i = 1; i < 10; i++) 
        { 
            for(int j = 1; j < 10; j++) 
            { 
                 
                // If any pair is obtained 
                // with difference x / 99 
                if ((i - j) == diff) 
                { 
                    
                    // Increase count 
                    ans += 10; 
                } 
            } 
        } 
    } 
     
    // Return the count 
    return ans; 
} 
 
// Driver Code 
public static void Main() 
{ 
    int x = 792; 
     
    Console.WriteLine(Count_Number(x)); 
} 
}

// This code is contributed by code_hunt
JavaScript
<script>

// Javascript program to implement
// the above approach

// Function to count three-digit
// numbers having difference x
// with its reverse
function Count_Number(x)
{
    let ans = 0;
   
    // If x is not multiple of 99
    if (x % 99 != 0)
    {
        
        // No solution exists
        ans = -1;
    }
    else
    {
        let diff = x / 99;
   
        // Generate all possible pairs
        // of digits [1, 9]
        for(let i = 1; i < 10; i++)
        {
            for(let j = 1; j < 10; j++)
            {
                
                // If any pair is obtained
                // with difference x / 99
                if ((i - j) == diff)
                {
                     
                    // Increase count
                    ans += 10;
                }
            }
        }
    }
     
    // Return the count
    return ans;
}

// Driver code
let x = 792;
 
document.write(Count_Number(x));

// This code is contributed by splevel62

</script>

Output
10

Time Complexity: O(1)
Auxiliary Space: O(1)


Next Article

Similar Reads