给定一个 整数N ,任务是找到两个数字a和b ,使a + b = N ,其中a和b不包含任何数字K。如果不可能,则打印-1 。
例子:
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.
方法:想法是从i = 1到n-1循环循环,并检查i和(n – i)是否不包含K。如果它不包含任何数字,则打印两个数字并退出循环。
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.
下面是上述方法的实现:
C++
// C++ program for
// the above approach
#include
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
输出:
(1, 99)
时间复杂度: O(N)
辅助空间: O(1)