Given a positive number n. We need to find x such that 1*n, 2*n, 3*n…..x*n gives all 10 digits at least once. If no such x is possible print -1.
Examples:
Input : n = 1692 Output : 3 Explanation: n = 1692, we got the digits- 1, 2, 6, 9 2*n = 3384, we got the digits- 1, 2, 3, 4, 6, 8, 9. 3*n = 5076, we got the digits- 1, 2, 3, 4, 5, 6, 7, 8, 9. At this step we got all the digits at least once. Therefore our answer is 3. Input : 1 Output : 10 Input : 0 Output :-1
The idea used here is simple. We start from 1 and keep multiplying with n till we do not get all the 10 digits at least once. In order to keep track of all the digits coming at each iteration, we use a temporary array of size 10 initially having all zeroes. Whenever we got a digit the first time we will initialize its index in array with 1. When all digits are visited once, we are done.
Following is the implementation of it.
// CPP program to find x such that 1*n, 2*n, 3*n // ...x * n have all digits from 1 to 9 at least // once #include <bits/stdc++.h> using namespace std;
// Returns smallest value x such that 1*n, 2*n, // 3*n ...x * n have all digits from 1 to 9 at // least once int smallestX( int n)
{ // taking temporary array and variable.
int temp[10] = { 0 };
if (n == 0)
return -1;
// iterate till we get all the 10 digits
// at least once
int count = 0, x = 0;
for (x = 1; count < 10; x++) {
int y = x * n;
// checking all the digits
while (y) {
if (temp[y % 10] == false ) {
count++;
temp[y % 10] = true ;
}
y /= 10;
}
}
return x - 1;
} // driver function int main()
{ int n = 5;
cout <<smallestX(n);
return 0;
} |
// Java program to find x such // that 1*n, 2*n, 3*n...x * n // have all digits from 1 to 9 // at least once import java.io.*;
import java.util.*;
class GFG
{ // Returns smallest value x // such that 1*n, 2*n, 3*n // ...x * n have all digits // from 1 to 9 at least once public static int smallestX( int n)
{ // taking temporary
// array and variable.
int [] temp = new int [ 10 ];
for ( int i = 0 ; i < 10 ; i++)
temp[i] = 0 ;
if (n == 0 )
return - 1 ;
// iterate till we get
// all the 10 digits
// at least once
int count = 0 , x = 0 ;
for (x = 1 ; count < 10 ; x++)
{
int y = x * n;
// checking all
// the digits
while (y > 0 )
{
if (temp[y % 10 ] == 0 )
{
count++;
temp[y % 10 ] = 1 ;
}
y /= 10 ;
}
}
return x - 1 ;
} // Driver Code public static void main(String args[])
{ int n = 5 ;
System.out.print(smallestX(n));
} } // This code is contributed // by Akanksha Rai(Abby_akku) |
# Python3 program to find x such # that 1*n, 2*n, 3*n ...x * n # have all digits from 1 to 9 # at least once # Returns smallest value x such # that 1*n, 2*n, 3*n ...x * n # have all digits from 1 to 9 # at least once def smallestX(n):
# taking temporary
# array and variable.
temp = [ 0 ] * 10
if (n = = 0 ):
return - 1
# iterate till we get
# all the 10 digits
# at least once
count = 0
x = 1
while (count < 10 ):
y = x * n
# checking all
# the digits
while (y> 0 ):
if (temp[y % 10 ] = = 0 ):
count + = 1
temp[y % 10 ] = 1
y = int (y / 10 )
x + = 1
return x - 1
# Driver code if __name__ = = '__main__' :
n = 5
print (smallestX(n))
# This code is contributed # by mits |
// C# program to find x such // that 1*n, 2*n, 3*n...x * n // have all digits from 1 to 9 // at least once using System;
class GFG
{ // Returns smallest value x // such that 1*n, 2*n, 3*n // ...x * n have all digits // from 1 to 9 at least once public static int smallestX( int n)
{ // taking temporary
// array and variable.
int [] temp = new int [10];
for ( int i = 0; i < 10; i++)
temp[i] = 0;
if (n == 0)
return -1;
// iterate till we get
// all the 10 digits
// at least once
int count = 0, x = 0;
for (x = 1; count < 10; x++)
{
int y = x * n;
// checking all the digits
while (y > 0)
{
if (temp[y % 10] == 0)
{
count++;
temp[y % 10] = 1;
}
y /= 10;
}
}
return x - 1;
} // Driver Code static void Main()
{ int n = 5;
Console.Write(smallestX(n));
} } // This code is contributed by mits |
<?php // PHP program to find x such // that 1*n, 2*n, 3*n ...x * n // have all digits from 1 to 9 // at least once // Returns smallest value x such // that 1*n, 2*n, 3*n ...x * n // have all digits from 1 to 9 // at least once function smallestX( $n )
{ // taking temporary
// array and variable.
$temp = array_fill (0, 10, false);
if ( $n == 0)
return -1;
// iterate till we get
// all the 10 digits
// at least once
$count = 0;
$x = 0;
for ( $x = 1; $count < 10; $x ++)
{
$y = $x * $n ;
// checking all
// the digits
while ( $y )
{
if ( $temp [ $y % 10] == false)
{
$count ++;
$temp [ $y % 10] = true;
}
$y = (int)( $y / 10);
}
}
return $x - 1;
} // Driver code $n = 5;
echo smallestX( $n );
// This code is contributed // by mits ?> |
<script> // Javascript program to find x such // that 1*n, 2*n, 3*n...x * n // have all digits from 1 to 9 // at least once // Returns smallest value x // such that 1*n, 2*n, 3*n // ...x * n have all digits // from 1 to 9 at least once function smallestX(n)
{ // taking temporary
// array and variable.
let temp = Array.from({length: 10},
(_, i) => 0);
for (let i = 0; i < 10; i++)
temp[i] = 0;
if (n == 0)
return -1;
// iterate till we get
// all the 10 digits
// at least once
let count = 0, x = 0;
for (x = 1; count < 10; x++)
{
let y = x * n;
// checking all
// the digits
while (y > 0)
{
if (temp[y % 10] == 0)
{
count++;
temp[y % 10] = 1;
}
y /= 10;
}
}
return x - 1;
} // driver program let n = 5;
document.write(smallestX(n));
</script> |
Output:
18