Open In App

Find two numbers whose sum is N and does not contain any digit as K

Last Updated : 04 Mar, 2023
Comments
Improve
Suggest changes
Like Article
Like
Report

Given an integer N, the task is to find two numbers a and b such that a + b = N, where a and b doesn't contain any of the digits as K. Print -1 if not possible.

Examples:

Input: N = 100, K = 0
Output: 1 99
Explanation:
1 + 99 = 100 and none of the numbers has 0 in it.

 Input: N = 123456789, K = 2
Output: 3456790 119999999 
Explanation:
3456790 + 119999999 = 123456789 and none of the numbers has 2 in it.

 

Approach: The idea is to iterate a loop from i = 1 to n-1, and check if i and (n - i) do not contain K. If it doesn't contain any digit as then print the two numbers and break out of the loop. 

For Example: N = 11, k = 0
i = 1, N - 1 = 10 but 10 contains 0, so increment i
i = 2, N - 1 = 9, so print this i and n - i.

Below is the implementation of the above approach:

C++
// C++ program for 
// the above approach
#include<bits/stdc++.h>
using namespace std;

int freqCount(string str, char k)
{
    int count = 0;
    for(int i = 0; 
            i < str.size(); i++)
    {
        if (str[i] == k)
        count++;
    }
    return count;
}

// Function to find two 
// numbers whose sum
// is N and do not 
// contain any digit as k
void findAandB(int n, int k)
{
    int flag = 0;
    
    // Check every number i and (n-i)
    for(int i = 1; i < n; i++)
    {
        // Check if i and n-i doesn't
        // contain k in them print i and n-i
        if (freqCount(to_string(i), 
                     (char)(k + 48)) == 0 and 
            freqCount(to_string(n - i), 
                     (char)(k + 48)) == 0)
        {
            cout << "(" << i << ", " 
                 << n - i << ")";
            flag = 1;
            break;
        }
    }
    
    // Check if flag is 0 
    // then print -1
    if (flag == 0)
        cout << -1;
}

// Driver Code
int main()
{ 
    
    // Given N and K
    int N = 100;
    int K = 0;
    
    // Function call
    findAandB(N, K);
    return 0;
}

// This code is contributed by Rajput-Ji
Java
// Java program for the above approach
import java.util.*;

class GFG{

static int freqCount(String str, char k)
{
    int count = 0;
    for(int i = 0; i < str.length(); i++)
    {
        if (str.charAt(i) == k)
            count++;
    }
    return count;
}

// Function to find two numbers 
// whose sum is N and do not
// contain any digit as k
static void findAandB(int n, int k)
{
    int flag = 0;

    // Check every number i and (n-i)
    for(int i = 1; i < n; i++) 
    {
        
        // Check if i and n-i doesn't
        // contain k in them print i and n-i
        if (freqCount(Integer.toString(i),
                     (char)(k + 48)) == 0 &&
            freqCount(Integer.toString(n - i),
                     (char)(k + 48)) == 0) 
        {
            System.out.print("(" + i + ", " +
                              (n - i) + ")");
            flag = 1;
            break;
        }
    }

    // Check if flag is 0
    // then print -1
    if (flag == 0)
        System.out.print(-1);
}

// Driver code
public static void main(String[] args)
{

    // Given N and K
    int N = 100;
    int K = 0;

    // Function call
    findAandB(N, K);
}
}

// This code is contributed by offbeat
Python
# Python program for the above approach

# Function to find two numbers whose sum
# is N and do not contain any digit as k
def findAandB(n, k):
  
    flag = 0

    # Check every number i and (n-i)
    for i in range(1, n):

        # Check if i and n-i doesn't
        # contain k in them print i and n-i
        if str(i).count(chr(k + 48)) == 0 \
        and str(n-i).count(chr(k + 48)) == 0:
            print(i, n-i)
            flag = 1
            break

    # check if flag is 0 then print -1
    if(flag == 0):
        print(-1)

# Driver Code
if __name__ == '__main__':
  
  # Given N and K
    N = 100
    K = 0
    
    # Function Call
    findAandB(N, K)
C#
// C# program for the 
// above approach
using System;
class GFG{

static int freqCount(String str, 
                     char k)
{
  int count = 0;
  
  for(int i = 0; i < str.Length; i++)
  {
    if (str[i] == k)
      count++;
  }
  
  return count;
}

// Function to find two numbers 
// whose sum is N and do not
// contain any digit as k
static void findAandB(int n, int k)
{
  int flag = 0;

  // Check every number i and (n-i)
  for(int i = 1; i < n; i++) 
  {
    // Check if i and n-i doesn't
    // contain k in them print i and n-i
    if (freqCount(i.ToString(),
                 (char)(k + 48)) == 0 &&
        freqCount((n-i).ToString(),
                  (char)(k + 48)) == 0) 
    {
      Console.Write("(" + i + ", " +
                    (n - i) + ")");
      flag = 1;
      break;
    }
  }

  // Check if flag is 0
  // then print -1
  if (flag == 0)
    Console.Write(-1);
}

// Driver code
public static void Main(String[] args)
{
  // Given N and K
  int N = 100;
  int K = 0;

  // Function call
  findAandB(N, K);
}
}

// This code is contributed by 29AjayKumar
JavaScript
<script>

// Javascript program for 
// the above approach

function freqCount(str, k)
{
    var count = 0;
    for(var i = 0; 
            i < str.length; i++)
    {
        if (str[i] == k)
        count++;
    }
    return count;
}

// Function to find two 
// numbers whose sum
// is N and do not 
// contain any digit as k
function findAandB(n, k)
{
    var flag = 0;
    
    // Check every number i and (n-i)
    for(var i = 1; i < n; i++)
    {
        // Check if i and n-i doesn't
        // contain k in them print i and n-i
        if (freqCount(i.toString(), 
                     String.fromCharCode(k + 48)) == 0 && 
            freqCount((n - i).toString(), 
                     String.fromCharCode(k + 48)) == 0)
        {
            document.write( "(" + i + ", " 
                 + (n - i) + ")");
            flag = 1;
            break;
        }
    }
    
    // Check if flag is 0 
    // then print -1
    if (flag == 0)
        cout + -1;
}

// Driver Code
// Given N and K
var N = 100;
var K = 0;

// Function call
findAandB(N, K);

// This code is contributed by rrrtnx.
</script>

Output: 
(1, 99)

 

Time Complexity: O(N*L) where L is the length of N
Auxiliary Space: O(1)


Next Article

Similar Reads