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++
// 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> |
(1, 99)
Time Complexity: O(N)
Auxiliary Space: O(1)
Please Login to comment...