📌  相关文章
📜  检查每个连续子序列的乘积是否不同

📅  最后修改于: 2021-05-08 16:44:32             🧑  作者: Mango

给定一个整数N ,任务是检查每个连续数字集的乘积是否不同。

例子:

方法:将每个连续子序列的数字乘积存储在集合中。如果要插入的产品已经存在于集合中,那么答案为“否”,否则所有产品最终都是不同的。

下面是上述方法的实现:

C++
// C++ implementation of the approach
#include 
using namespace std;
  
// Function that returns true if the product
// of every digit of a contiguous subsequence
// is distinct
bool productsDistinct(int N)
{
    // To store the given number as a string
    string s = "";
  
    // Append all the digits
    // starting from the end
    while (N) {
        s += (char)(N % 10 + '0');
        N /= 10;
    }
  
    // Reverse the string to get
    // the  original number
    reverse(s.begin(), s.end());
  
    // Store size of the string
    int sz = s.size();
  
    // Set to store product of
    // each contiguous subsequence
    set se;
  
    // Find product of every
    // contiguous subsequence
    for (int i = 0; i < sz; i++) {
        int product = 1;
        for (int j = i; j < sz; j++) {
            product *= (int)(s[j] - '0');
  
            // If current product already
            // exists in the set
            if (se.find(product) != se.end())
                return false;
            else
                se.insert(product);
        }
    }
  
    return true;
}
  
// Driver code
int main()
{
    int N = 2345;
  
    if (productsDistinct(N))
        cout << "Yes";
    else
        cout << "No";
  
    return 0;
}


Java
// Java implementation of the approach
import java.util.*;
  
class GFG 
{
  
// Function that returns true if 
// the product of every digit of a 
// contiguous subsequence is distinct
static boolean productsDistinct(int N)
{
      
    // To store the given number
    // as a string
    String s = "";
  
    // Append all the digits
    // starting from the end
    while (N > 0) 
    {
        s += (char)(N % 10 + '0');
        N /= 10;
    }
  
    // Reverse the string to get
    // the original number
    s = reverse(s);
  
    // Store size of the string
    int sz = s.length();
  
    // Set to store product of
    // each contiguous subsequence
    HashSet se = new HashSet();
  
    // Find product of every
    // contiguous subsequence
    for (int i = 0; i < sz; i++) 
    {
        int product = 1;
        for (int j = i; j < sz; j++) 
        {
            product *= (int)(s.charAt(j) - '0');
  
            // If current product already
            // exists in the set
            if (se.contains(product))
                return false;
            else
                se.add(product);
        }
    }
    return true;
}
  
static String reverse(String input)
{
    char[] a = input.toCharArray();
    int l, r;
    r = a.length - 1;
    for (l = 0; l < r; l++, r--) 
    {
        // Swap values of l and r 
        char temp = a[l];
        a[l] = a[r];
        a[r] = temp;
    }
    return String.valueOf(a);
} 
  
// Driver code
public static void main(String[] args) 
{
    int N = 2345;
  
    if (productsDistinct(N))
        System.out.println("Yes");
    else
        System.out.println("No");
    }
}
  
// This code is contributed 
// by PrinciRaj1992


Python3
# Python 3 implementation of the approach
  
# Function that returns true if the product
# of every digit of a contiguous subsequence
# is distinct
def productsDistinct(N):
       
    # To store the given number as a string
    s = ""
  
    # Append all the digits
    # starting from the end
    while (N):
        s += chr(N % 10 + ord('0'))
        N //= 10
  
    # Reverse the string to get
    # the original number
    s = s[::-1]
  
    # Store size of the string
    sz = len(s)
  
    # Set to store product of
    # each contiguous subsequence
    se = []
  
    # Find product of every
    # contiguous subsequence
    for i in range(sz):
        product = 1
        for j in range(i, sz, 1):
            product *= ord(s[j]) - ord('0')
  
            # If current product already
            # exists in the set
            for p in range(len(se)):
                if se[p] == product:
                    return False
                else:
                    se.append(product)
  
    return True
  
# Driver code
if __name__ == '__main__':
    N = 2345
  
    if (productsDistinct(N)):
        print("Yes")
    else:
        print("No")
          
# This code is contributed by
# Surendra_Gangwar


C#
// C# implementation of the approach
using System;
using System.Collections.Generic; 
  
class GFG 
{
  
// Function that returns true if 
// the product of every digit of a 
// contiguous subsequence is distinct
static Boolean productsDistinct(int N)
{
      
    // To store the given number
    // as a string
    String s = "";
  
    // Append all the digits
    // starting from the end
    while (N > 0) 
    {
        s += (char)(N % 10 + '0');
        N /= 10;
    }
  
    // Reverse the string to get
    // the original number
    s = reverse(s);
  
    // Store size of the string
    int sz = s.Length;
  
    // Set to store product of
    // each contiguous subsequence
    HashSet se = new HashSet();
  
    // Find product of every
    // contiguous subsequence
    for (int i = 0; i < sz; i++) 
    {
        int product = 1;
        for (int j = i; j < sz; j++) 
        {
            product *= (int)(s[j] - '0');
  
            // If current product already
            // exists in the set
            if (se.Contains(product))
                return false;
            else
                se.Add(product);
        }
    }
    return true;
}
  
static String reverse(String input)
{
    char[] a = input.ToCharArray();
    int l, r;
    r = a.Length - 1;
    for (l = 0; l < r; l++, r--) 
    {
        // Swap values of l and r 
        char temp = a[l];
        a[l] = a[r];
        a[r] = temp;
    }
    return String.Join("",a);
} 
  
// Driver code
public static void Main(String[] args) 
{
    int N = 2345;
  
    if (productsDistinct(N))
        Console.WriteLine("Yes");
    else
        Console.WriteLine("No");
}
}
  
// This code is contributed by 29AjayKumar


输出:
Yes