给定数组arr []仅包含从0到9的数字,任务是从给定的数字中形成最小的可能数字,然后检查由此创建的数字的第一位和最后一位是否可以重新排列以形成质数或不是。
例子:
Input: arr[]={2, 6, 4, 9}
Output: Minimum number: 2469
Prime number combinations: 29
The first and last digits are 2 and 9 respectively. The combinations are 29 and 92. Only 29 is prime.
Input: arr[]={2, 6, 4, 3, 1, 7}
Output: Minimum number: 123467
Prime number combinations: 17 71
The first and last digits are 1 and 7 respectively. The combinations are 17 and 71, and both are primes
方法:
- 创建一个大小为10的哈希表,以将给定数组中出现的数字存储到哈希表中。
- 从数字0开始按降序打印数字。它们与最小数字的相似之处在于重新排列给定数字的数字。
- 对于素数检查,请检查使用第一位和最后一位数字形成的数字是否为素数。反向执行相同的操作。
下面是上述方法的实现:
C++
// C++ implementation of above approach
#include
using namespace std;
// function to check prime
int isPrime(int n)
{
int i, c = 0;
for (i = 1; i < n / 2; i++) {
if (n % i == 0)
c++;
}
if (c == 1)
return 1;
else
return 0;
}
// Function to generate smallest possible
// number with given digits
void findMinNum(int arr[], int n)
{
// Declare a hash array of size 10
// and initialize all the elements to zero
int first = 0, last = 0, num, rev, i;
int hash[10] = { 0 };
// store the number of occurrences of the digits
// in the given array into the hash table
for (int i = 0; i < n; i++) {
hash[arr[i]]++;
}
// Traverse the hash in ascending order
// to print the required number
cout << "Minimum number: ";
for (int i = 0; i <= 9; i++) {
// Print the number of times a digits occurs
for (int j = 0; j < hash[i]; j++)
cout << i;
}
cout << endl;
// extracting the first digit
for (i = 0; i <= 9; i++) {
if (hash[i] != 0) {
first = i;
break;
}
}
// extracting the last digit
for (i = 9; i >= 0; i--) {
if (hash[i] != 0) {
last = i;
break;
}
}
num = first * 10 + last;
rev = last * 10 + first;
// printing the prime combinations
cout << "Prime combinations: ";
if (isPrime(num) && isPrime(rev))
cout << num << " " << rev;
else if (isPrime(num))
cout << num;
else if (isPrime(rev))
cout << rev;
else
cout << "No combinations exist";
}
// Driver code
int main()
{
int arr[] = { 1, 2, 4, 7, 8};
findMinNum(arr, 5);
return 0;
}
Java
// Java implementation of above approach
import java.io.*;
class SmallPrime
{
// function to check prime
static boolean isPrime(int n)
{
int i, c = 0;
for (i = 1; i < n / 2; i++)
{
if (n % i == 0)
c++;
}
if (c == 1)
{
return true;
}
else
{
return false;
}
}
// Function to generate smallest possible
// number with given digits
static void findMinNum(int arr[], int n)
{
// Declare a hash array of size 10
// and initialize all the elements to zero
int first = 0, last = 0, num, rev, i;
int hash[] = new int[10];
// store the number of occurrences of the digits
// in the given array into the hash table
for ( i = 0; i < n; i++)
{
hash[arr[i]]++;
}
// Traverse the hash in ascending order
// to print the required number
System.out.print("Minimum number: ");
for ( i = 0; i <= 9; i++)
{
// Print the number of times a digits occurs
for (int j = 0; j < hash[i]; j++)
System.out.print(i);
}
System.out.println();
System.out.println();
// extracting the first digit
for (i = 0; i <= 9; i++)
{
if (hash[i] != 0)
{
first = i;
break;
}
}
// extracting the last digit
for (i = 9; i >= 0; i--)
{
if (hash[i] != 0)
{
last = i;
break;
}
}
num = first * 10 + last;
rev = last * 10 + first;
// printing the prime combinations
System.out.print( "Prime combinations: ");
if (isPrime(num) && isPrime(rev))
{
System.out.println(num + " " + rev);
}
else if (isPrime(num))
{
System.out.println(num);
}
else if (isPrime(rev))
{
System.out.println(rev);
}
else
{
System.out.println("No combinations exist");
}
}
// Driver code
public static void main (String[] args)
{
SmallPrime smallprime = new SmallPrime();
int arr[] = {1, 2, 4, 7, 8};
smallprime.findMinNum(arr, 5);
}
}
// This code has been contributed by inder_verma.
Python3
# Python3 implementation of above
# approach
import math as mt
# function to check prime
def isPrime(n):
i, c = 0, 0
for i in range(1, n // 2):
if (n % i == 0):
c += 1
if (c == 1):
return 1
else:
return 0
# Function to generate smallest possible
# number with given digits
def findMinNum(arr, n):
# Declare a Hash array of size 10
# and initialize all the elements to zero
first, last = 0, 0
Hash = [0 for i in range(10)]
# store the number of occurrences of
# the digits in the given array into
# the Hash table
for i in range(n):
Hash[arr[i]] += 1
# Traverse the Hash in ascending order
# to print the required number
print("Minimum number: ", end = "")
for i in range(0, 10):
# Print the number of times
# a digits occurs
for j in range(Hash[i]):
print(i, end = "")
print()
# extracting the first digit
for i in range(10):
if (Hash[i] != 0):
first = i
break
# extracting the last digit
for i in range(9, -1, -1):
if (Hash[i] != 0):
last = i
break
num = first * 10 + last
rev = last * 10 + first
# printing the prime combinations
print("Prime combinations: ", end = "")
if (isPrime(num) and isPrime(rev)):
print(num, " ", rev)
elif (isPrime(num)):
print(num)
elif (isPrime(rev)):
print(rev)
else:
print("No combinations exist")
# Driver code
arr = [ 1, 2, 4, 7, 8]
findMinNum(arr, 5)
# This code is contributed by
# Mohit kumar 29
C#
// C# implementation of above approach
using System;
class GFG
{
// function to check prime
static bool isPrime(int n)
{
int i, c = 0;
for (i = 1; i < n / 2; i++)
{
if (n % i == 0)
{
c++;
}
}
if (c == 1)
{
return true;
}
else
{
return false;
}
}
// Function to generate smallest
// possible number with given digits
static void findMinNum(int[] arr, int n)
{
// Declare a hash array of
// size 10 and initialize
// all the elements to zero
int first = 0, last = 0, num, rev, i;
int[] hash = new int[10];
// store the number of occurrences
// of the digits in the given array
// into the hash table
for (i = 0; i < n; i++)
{
hash[arr[i]]++;
}
// Traverse the hash in ascending order
// to print the required number
Console.Write("Minimum number: ");
for (i = 0; i <= 9; i++)
{
// Print the number of times
// a digits occurs
for (int j = 0; j < hash[i]; j++)
{
Console.Write(i);
}
}
Console.WriteLine();
Console.WriteLine();
// extracting the first digit
for (i = 0; i <= 9; i++)
{
if (hash[i] != 0)
{
first = i;
break;
}
}
// extracting the last digit
for (i = 9; i >= 0; i--)
{
if (hash[i] != 0)
{
last = i;
break;
}
}
num = first * 10 + last;
rev = last * 10 + first;
// printing the prime combinations
Console.Write("Prime combinations: ");
if (isPrime(num) && isPrime(rev))
{
Console.WriteLine(num + " " + rev);
}
else if (isPrime(num))
{
Console.WriteLine(num);
}
else if (isPrime(rev))
{
Console.WriteLine(rev);
}
else
{
Console.WriteLine("No combinations exist");
}
}
// Driver code
public static void Main()
{
int[] arr = {1, 2, 4, 7, 8};
findMinNum(arr, 5);
}
}
// This code is contributed
// by PrinciRaj1992
PHP
= 0; $i--)
{
if ($hash[$i] != 0)
{
$last = $i;
break;
}
}
$num = $first * 10 + $last;
$rev = $last * 10 + $first;
// printing the prime combinations
echo "\nPrime combinations: ";
if (isPrime($num) && isPrime($rev))
echo $num. " " . $rev;
else if (isPrime($num))
echo $num;
else if (isPrime($rev))
echo $rev;
else
echo "No combinations exist";
}
// Driver Code
$arr = array(1, 2, 4, 7, 8);
findMinNum($arr, 5);
// This code is contributed
// by Rajput-Ji
?>
输出:
Minimum number: 12478
Prime combinations: No combinations exist