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

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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Python

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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)

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Output: 

(1, 99)







 

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

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : Rajput-Ji, offbeat, 29AjayKumar