📜  查找两个数字之和为N并且不包含任何数字作为K

📅  最后修改于: 2021-04-29 03:27:36             🧑  作者: Mango

给定一个 整数N 任务是找到两个数字a和b ,使a + b = N ,其中a和b不包含任何数字K。如果不可能,则打印-1

例子:

方法:想法是从i = 1到n-1循环循环,并检查i(n – i)是否不包含K。如果它不包含任何数字,则打印两个数字并退出循环。

下面是上述方法的实现:

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)