📌  相关文章
📜  计算范围内的数字,使其中的数字及其与 q 的乘积不相等

📅  最后修改于: 2021-10-27 16:52:58             🧑  作者: Mango

给定一个范围的数字 [l, r] 和一个整数 q。任务是对给定范围内的所有此类数字进行计数,使得该数字的任何数字与其与给定数字 q 的乘积中的任何数字都不匹配。

例子

Input : l = 10, r = 12, q = 2
Output : 1
10*2 = 20 which has 0 as same digit
12*2 = 24 which as 2 as same digit
11*2 = 22 no same digit

Input : l = 5, r = 15, q = 2
Output : 9

来源:高盛专访集 46
这个想法是运行从 l 到 r 的循环以生成范围内的所有数字,并将每个这样的数字 n 及其与 q 的乘积,即 n*q 转换为使用 to_string() 方法的字符串,然后检查 string2 中是否有任何字符是存在于 string1 中或不使用基本字符串散列。

下面是上述方法的实现:

C++
// C++ program for above approach
#include 
using namespace std;
 
// Function to check if all of the digits
// in a number and it's product with q
// are unequal or not
bool checkIfUnequal(int n, int q)
{
 
    // convert first number into string
    string s1 = to_string(n);
    int a[26] = { 0 };
 
    // Insert elements from 1st number
    // to hash
    for (int i = 0; i < s1.size(); i++)
        a[s1[i] - '0']++;
 
    // Calculate corresponding product
    int prod = n * q;
 
    // Convert the product to string
    string s2 = to_string(prod);
 
    // Using the hash check if any digit of
    // product matches with the digits of
    // input number
    for (int i = 0; i < s2.size(); i++)
    {
        // If yes, return false
        if (a[s2[i] - '0'])
            return false;
    }
 
    // Return true
    return true;
}
 
// Function to count numbers in the range [l, r]
// such that all of the digits of the number and
// it's product with q are unequal
int countInRange(int l, int r, int q)
{
    int count = 0;
 
    for (int i = l; i <= r; i++) {
        // check for every number between l and r
        if (checkIfUnequal(i, q))
            count++;
    }
 
    return count;
}
 
// Driver Code
int main()
{
 
    int l = 10, r = 12, q = 2;
 
    // Function Call
    cout << countInRange(l, r, q);
    return 0;
}


Java
// Java program for above approach
class GfG {
 
    // Function to check if all of the digits
    // in a number and it's product with q
    // are unequal or not
    static boolean checkIfUnequal(int n, int q)
    {
 
        // convert first number into string
        String s1 = Integer.toString(n);
        int a[] = new int[26];
 
        // Insert elements from 1st number
        // to hash
        for (int i = 0; i < s1.length(); i++)
            a[s1.charAt(i) - '0']++;
 
        // Calculate corresponding product
        int prod = n * q;
 
        // Convert the product to string
        String s2 = Integer.toString(prod);
 
        // Using the hash check if any digit of
        // product matches with the digits of
        // input number
        for (int i = 0; i < s2.length(); i++)
        {
            // If yes, return false
            if (a[s2.charAt(i) - '0'] > 0)
                return false;
        }
        // else, return true
        return true;
    }
 
    // Function to count numbers in the range [l, r]
    // such that all of the digits of the number and
    // it's product with q are unequal
    static int countInRange(int l, int r, int q)
    {
        int count = 0;
 
        for (int i = l; i <= r; i++) {
 
            // check for every number between l and r
            if (checkIfUnequal(i, q))
                count++;
        }
 
        return count;
    }
 
    // Driver Code
    public static void main(String[] args)
    {
 
        int l = 10, r = 12, q = 2;
 
        // Function Call
        System.out.println(countInRange(l, r, q));
    }
}


Python3
# Python 3 program for above approach
 
# Function to check if all of the digits
# in a number and it's product with q
# are unequal or not
def checkIfUnequal(n, q):
     
    # convert first number into string
    s1 = str(n)
    a = [0 for i in range(26)]
 
    # Insert elements from 1st number
    # to hash
    for i in range(0, len(s1), 1):
        a[ord(s1[i]) - ord('0')] += 1
 
    # Calculate corresponding product
    prod = n * q
 
    # Convert the product to string
    s2 = str(prod)
 
    # Using the hash check if any digit of
    # product matches with the digits of
    # input number
    for i in range(0, len(s2), 1):
         
        # If yes, return false
        if (a[ord(s2[i]) - ord('0')]):
            return False
 
    # Return true
    return True
 
# Function to count numbers in the range [l, r]
# such that all of the digits of the number and
# it's product with q are unequal
def countInRange(l, r, q):
    count = 0
 
    for i in range(l, r + 1, 1):
         
        # check for every number between l and r
        if (checkIfUnequal(i, q)):
            count += 1
     
    return count
 
# Driver Code
if __name__ == '__main__':
    l = 10
    r = 12
    q = 2
 
    # Function call
    print(countInRange(l, r, q))
 
# This code is contributed by
# Sahil_Shelangia


C#
// C# program for above approach
using System;
 
class GfG {
 
    // Function to check if all of the digits
    // in a number and it's product with q
    // are unequal or not
    static bool checkIfUnequal(int n, int q)
    {
 
        // convert first number into string
        string s1 = n.ToString();
        int[] a = new int[26];
 
        // Insert elements from 1st number
        // to hash
        for (int i = 0; i < s1.Length; i++)
            a[s1[i] - '0']++;
 
        // Calculate corresponding product
        int prod = n * q;
 
        // Convert the product to string
        string s2 = prod.ToString();
 
        // Using the hash check if any digit of
        // product matches with the digits of
        // input number
        for (int i = 0; i < s2.Length; i++)
        {
            // If yes, return false
            if (a[s2[i] - '0'])
                return false;
        }
 
        // Else, return true
        return true;
    }
 
    // Function to count numbers in the range [l, r]
    // such that all of the digits of the number and
    // it's product with q are unequal
    static int countInRange(int l, int r, int q)
    {
        int count = 0;
 
        for (int i = l; i <= r; i++)
        {
            // check for every number between l and r
            if (checkIfUnequal(i, q))
                count++;
        }
 
        return count;
    }
 
    // Driver Code
    public static void Main()
    {
 
        int l = 10, r = 12, q = 2;
 
        // Function call
        Console.WriteLine(countInRange(l, r, q));
    }
}
 
// This code is contributed bt Archana_kumari


PHP
// PHP program for above code
 
// Function to check if all of the digits
// in a number and it's product with q
// are unequal or not
function checkIfUnequal($n, $q)
{
    // convert first number into string
    $s1 = strval($n);
    $a = array_fill(0, 26, NULL);
 
    // Insert elements from 1st number
    // to hash
    for ($i = 0; $i < strlen($s1); $i++)
        $a[ord($s1[$i]) - ord('0')]++;
 
    // Calculate corresponding product
    $prod = $n * $q;
 
    // Convert the product to string
    $s2 = strval($prod);
 
    // Using the hash check if any digit of
    // product matches with the digits of
    // input number
    for ($i = 0; $i < strlen($s2); $i++)
    {
        
       // If yes, return false
       if ($a[ord($s2[$i]) - ord('0')])
            return false;
    }
 
    // Else, return true
    return true;
}
 
// Function to count numbers in the range
// [l, r] such that all of the digits of the
// number and it's product with q are unequal
function countInRange($l, $r, $q)
{
    $count = 0;
 
    for ($i = $l; $i <= $r; $i++)
    {
        // check for every number between l and r
        if (checkIfUnequal($i, $q))
            $count++;
    }
 
    return $count;
}
 
// Driver Code
$l = 10;
$r = 12;
$q = 2;
 
// Function call
echo countInRange($l, $r, $q);
 
// This code is contributed by ita_c
?>


Javascript


输出
1

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程