Minimum number with digits as 4 and 7 only and given sum
Last Updated :
14 Mar, 2022
Lucky numbers are the positive integers whose decimal representations contain only the lucky digits 4 and 7.
What minimum lucky number has the sum of digits equal to n.
Examples:
Input : sum = 11
Output : 47
Sum of digits in 47 is 11 and 47
is the smallest number with given sum.
Input : sum = 10
Output : -1
The approach is based on below facts :
- Since digits are 4 and 7 only, given digit sum can be written as a*4 + b*7 = sum where a and b are some positive integers (greater than or equal to 0) representing number of 4s and 7s respectively.
- Since we need to find minimum number, the result would always be in the form which has all 4s first, then all 7s, i.e., 44…477…7.
We basically need to find values of ‘a’ and ‘b’. We find these values using below facts:
- If sum is multiple of 4, then result has all 4s.
- If sum is multiple of 7, then result has all 7s.
- If sum is not multiple of 4 or 7, then we can subtract one of them till sum becomes multiple of other.
C++
#include <bits/stdc++.h>
using namespace std;
void findMin( int sum)
{
int a = 0, b = 0;
while (sum > 0)
{
if (sum % 7 == 0)
{
b++;
sum -= 7;
}
else if (sum % 4 == 0)
{
a++;
sum -= 4;
}
else
{
a++;
sum -= 4;
}
}
if (sum < 0)
{
printf ( "-1n" );
return ;
}
for ( int i=0; i<a; i++)
printf ( "4" );
for ( int i=0; i<b; i++)
printf ( "7" );
printf ( "n" );
}
int main()
{
findMin(15);
return 0;
}
|
Java
import java.io.*;
class GFG {
static void findMin( int sum)
{
int a = 0 , b = 0 ;
while (sum > 0 )
{
if (sum % 7 == 0 )
{
b++;
sum -= 7 ;
}
else if (sum % 4 == 0 )
{
a++;
sum -= 4 ;
}
else
{
a++;
sum -= 4 ;
}
}
if (sum < 0 )
{
System.out.print( "-1n" );
return ;
}
for ( int i = 0 ; i < a; i++)
System.out.print( "4" );
for ( int i = 0 ; i < b; i++)
System.out.print( "7" );
System.out.println();
}
public static void main(String args[])
throws IOException
{
findMin( 15 );
}
}
|
Python3
def findMin(s):
a, b = 0 , 0
while (s > 0 ):
if (s % 7 = = 0 ):
b + = 1
s - = 7
else if (s % 4 = = 0 ):
a + = 1
s - = 4
else :
a + = 1
s - = 4
string = ""
if (s < 0 ):
string = "-1"
return string
string + = "4" * a
string + = "7" * b
return string
print (findMin( 15 ))
|
C#
using System;
class GFG {
static void findMin( int sum)
{
int a = 0, b = 0;
while (sum > 0)
{
if (sum % 7 == 0)
{
b++;
sum -= 7;
}
else if (sum % 4 == 0)
{
a++;
sum -= 4;
}
else
{
a++;
sum -= 4;
}
}
if (sum < 0)
{
Console.Write( "-1n" );
return ;
}
for ( int i = 0; i < a; i++)
Console.Write( "4" );
for ( int i = 0; i < b; i++)
Console.Write( "7" );
Console.WriteLine();
}
public static void Main()
{
findMin(15);
}
}
|
PHP
<?php
function findMin( $sum )
{
$a = 0;
$b = 0;
while ( $sum > 0)
{
if ( $sum % 7 == 0)
{
$b ++;
$sum -= 7;
}
else if ( $sum % 4 == 0)
{
$a ++;
$sum -= 4;
}
else
{
$a ++;
$sum -= 4;
}
}
if ( $sum < 0)
{
echo ( "-1n" );
return ;
}
for ( $i = 0; $i < $a ; $i ++)
echo ( "4" );
for ( $i = 0; $i < $b ; $i ++)
echo ( "7" );
echo ( "\n" );
}
findMin(15);
?>
|
Javascript
<script>
function findMin(sum)
{
var a = 0, b = 0;
while (sum > 0)
{
if (sum % 7 == 0)
{
b++;
sum -= 7;
}
else if (sum % 4 == 0)
{
a++;
sum -= 4;
}
else
{
a++;
sum -= 4;
}
}
if (sum < 0)
{
document.write( "-1n" );
return ;
}
for (i = 0; i < a; i++)
document.write( "4" );
for (i = 0; i < b; i++)
document.write( "7" );
document.write();
}
findMin(15);
</script>
|
Output:
447
Time Complexity: O(sum).
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...