Smallest x such that 1*n, 2*n, … x*n have all digits from 1 to 9
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.
C++
#include <bits/stdc++.h>
using namespace std;
int smallestX( int n)
{
int temp[10] = { 0 };
if (n == 0)
return -1;
int count = 0, x = 0;
for (x = 1; count < 10; x++) {
int y = x * n;
while (y) {
if (temp[y % 10] == false ) {
count++;
temp[y % 10] = true ;
}
y /= 10;
}
}
return x - 1;
}
int main()
{
int n = 5;
cout <<smallestX(n);
return 0;
}
|
Java
import java.io.*;
import java.util.*;
class GFG
{
public static int smallestX( int n)
{
int [] temp = new int [ 10 ];
for ( int i = 0 ; i < 10 ; i++)
temp[i] = 0 ;
if (n == 0 )
return - 1 ;
int count = 0 , x = 0 ;
for (x = 1 ; count < 10 ; x++)
{
int y = x * n;
while (y > 0 )
{
if (temp[y % 10 ] == 0 )
{
count++;
temp[y % 10 ] = 1 ;
}
y /= 10 ;
}
}
return x - 1 ;
}
public static void main(String args[])
{
int n = 5 ;
System.out.print(smallestX(n));
}
}
|
Python3
def smallestX(n):
temp = [ 0 ] * 10
if (n = = 0 ):
return - 1
count = 0
x = 1
while (count < 10 ):
y = x * n
while (y> 0 ):
if (temp[y % 10 ] = = 0 ):
count + = 1
temp[y % 10 ] = 1
y = int (y / 10 )
x + = 1
return x - 1
if __name__ = = '__main__' :
n = 5
print (smallestX(n))
|
C#
using System;
class GFG
{
public static int smallestX( int n)
{
int [] temp = new int [10];
for ( int i = 0; i < 10; i++)
temp[i] = 0;
if (n == 0)
return -1;
int count = 0, x = 0;
for (x = 1; count < 10; x++)
{
int y = x * n;
while (y > 0)
{
if (temp[y % 10] == 0)
{
count++;
temp[y % 10] = 1;
}
y /= 10;
}
}
return x - 1;
}
static void Main()
{
int n = 5;
Console.Write(smallestX(n));
}
}
|
PHP
<?php
function smallestX( $n )
{
$temp = array_fill (0, 10, false);
if ( $n == 0)
return -1;
$count = 0;
$x = 0;
for ( $x = 1; $count < 10; $x ++)
{
$y = $x * $n ;
while ( $y )
{
if ( $temp [ $y % 10] == false)
{
$count ++;
$temp [ $y % 10] = true;
}
$y = (int)( $y / 10);
}
}
return $x - 1;
}
$n = 5;
echo smallestX( $n );
?>
|
Javascript
<script>
function smallestX(n)
{
let temp = Array.from({length: 10},
(_, i) => 0);
for (let i = 0; i < 10; i++)
temp[i] = 0;
if (n == 0)
return -1;
let count = 0, x = 0;
for (x = 1; count < 10; x++)
{
let y = x * n;
while (y > 0)
{
if (temp[y % 10] == 0)
{
count++;
temp[y % 10] = 1;
}
y /= 10;
}
}
return x - 1;
}
let n = 5;
document.write(smallestX(n));
</script>
|
Output:
18
Last Updated :
13 May, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...