Find two numbers whose sum is N and does not contain any digit as K
Last Updated :
04 Mar, 2023
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++
#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;
}
void findAandB( int n, int k)
{
int flag = 0;
for ( int i = 1; i < 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 ;
}
}
if (flag == 0)
cout << -1;
}
int main()
{
int N = 100;
int K = 0;
findAandB(N, K);
return 0;
}
|
Java
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;
}
static void findAandB( int n, int k)
{
int flag = 0 ;
for ( int i = 1 ; i < 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 ;
}
}
if (flag == 0 )
System.out.print(- 1 );
}
public static void main(String[] args)
{
int N = 100 ;
int K = 0 ;
findAandB(N, K);
}
}
|
Python
def findAandB(n, k):
flag = 0
for i in range ( 1 , n):
if str (i).count( chr (k + 48 )) = = 0 \
and str (n - i).count( chr (k + 48 )) = = 0 :
print (i, n - i)
flag = 1
break
if (flag = = 0 ):
print ( - 1 )
if __name__ = = '__main__' :
N = 100
K = 0
findAandB(N, K)
|
C#
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;
}
static void findAandB( int n, int k)
{
int flag = 0;
for ( int i = 1; i < 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 ;
}
}
if (flag == 0)
Console.Write(-1);
}
public static void Main(String[] args)
{
int N = 100;
int K = 0;
findAandB(N, K);
}
}
|
Javascript
<script>
function freqCount(str, k)
{
var count = 0;
for ( var i = 0;
i < str.length; i++)
{
if (str[i] == k)
count++;
}
return count;
}
function findAandB(n, k)
{
var flag = 0;
for ( var i = 1; i < 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 ;
}
}
if (flag == 0)
cout + -1;
}
var N = 100;
var K = 0;
findAandB(N, K);
</script>
|
Time Complexity: O(N*L) where L is the length of N
Auxiliary Space: O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...