Consider a series of numbers composed of only digits 4 and 7. First few numbers in the series are 4, 7, 44, 47, 74, 44744,.. etc. Given a number n, we need to find n-th number in the series.
Examples:
Input : n = 2
Output : 7Input : n = 3
Output : 44Input : n = 5
Output : 74Input : n = 6
Output : 77
The idea is based on the fact that the value of last digit alternates in series. For example, if last digit of i-th number is 4, then last digit of (i-1)-th and (i+1)-th numbers must be 7.
We create an array of size (n+1) and push 4 and 7 (These two are always first two elements of series) to it. For more elements we check
1) If i is odd,
arr[i] = arr[i/2]*10 + 4;
2) If it is even,
arr[i] = arr[(i/2)-1]*10 + 7;
At last return arr[n].
// C++ program to find n-th number in a series // made of digits 4 and 7 #include <bits/stdc++.h> using namespace std;
// Return n-th number in series made of 4 and 7 int printNthElement( int n)
{ // create an array of size (n+1)
int arr[n+1];
arr[1] = 4;
arr[2] = 7;
for ( int i=3; i<=n; i++)
{
// If i is odd
if (i%2 != 0)
arr[i] = arr[i/2]*10 + 4;
else
arr[i] = arr[(i/2)-1]*10 + 7;
}
return arr[n];
} // Driver code int main()
{ int n = 6;
cout << printNthElement(n);
return 0;
} |
// Java program to find n-th number in a series // made of digits 4 and 7 class FindNth
{ // Return n-th number in series made of 4 and 7
static int printNthElement( int n)
{
// create an array of size (n+1)
int arr[] = new int [n+ 1 ];
arr[ 1 ] = 4 ;
arr[ 2 ] = 7 ;
for ( int i= 3 ; i<=n; i++)
{
// If i is odd
if (i% 2 != 0 )
arr[i] = arr[i/ 2 ]* 10 + 4 ;
else
arr[i] = arr[(i/ 2 )- 1 ]* 10 + 7 ;
}
return arr[n];
}
// main function
public static void main (String[] args)
{
int n = 6 ;
System.out.println(printNthElement(n));
}
} |
# Python3 program to find n-th number # in a series made of digits 4 and 7 # Return n-th number in series made # of 4 and 7 def printNthElement(n) :
# create an array of size (n + 1)
arr = [ 0 ] * (n + 1 );
arr[ 1 ] = 4
arr[ 2 ] = 7
for i in range ( 3 , n + 1 ) :
# If i is odd
if (i % 2 ! = 0 ) :
arr[i] = arr[i / / 2 ] * 10 + 4
else :
arr[i] = arr[(i / / 2 ) - 1 ] * 10 + 7
return arr[n]
# Driver code n = 6
print (printNthElement(n))
# This code is contributed by Nikita Tiwari. |
// C# program to find n-th number in a series // made of digits 4 and 7 using System;
class GFG
{ // Return n-th number in series made of 4 and 7
static int printNthElement( int n)
{
// create an array of size (n+1)
int []arr = new int [n+1];
arr[1] = 4;
arr[2] = 7;
for ( int i = 3; i <= n; i++)
{
// If i is odd
if (i % 2 != 0)
arr[i] = arr[i / 2] * 10 + 4;
else
arr[i] = arr[(i / 2) - 1] * 10 + 7;
}
return arr[n];
}
// Driver code
public static void Main ()
{
int n = 6;
Console.Write(printNthElement(n));
}
} // This code is contributed by vt_m. |
<?php // PHP program to find n-th // number in a series // made of digits 4 and 7 // Return n-th number in // series made of 4 and 7 function printNthElement( $n )
{ // create an array
// of size (n+1)
$arr [1] = 4;
$arr [2] = 7;
for ( $i = 3; $i <= $n ; $i ++)
{
// If i is odd
if ( $i % 2 != 0)
$arr [ $i ] = $arr [ $i / 2] *
10 + 4;
else
$arr [ $i ] = $arr [( $i / 2) - 1] *
10 + 7;
}
return $arr [ $n ];
} // Driver code $n = 6;
echo (printNthElement( $n ));
// This code is contributed by Ajit. ?> |
<script> // javascript program to find n-th number in a series // made of digits 4 and 7 // Return n-th number in series made of 4 and 7
function printNthElement(n) {
// create an array of size (n+1)
var arr = Array(n + 1).fill(0);
arr[1] = 4;
arr[2] = 7;
for ( var i = 3; i <= n; i++) {
// If i is odd
if (i % 2 != 0)
arr[i] = arr[i / 2] * 10 + 4;
else
arr[i] = arr[(i / 2) - 1] * 10 + 7;
}
return arr[n];
}
// main function
var n = 6;
document.write(printNthElement(n));
// This code is contributed by Princi Singh </script> |
Output:
77
Time Complexity: O(n) since using a for loop
Auxiliary Space: O(n) for creating an array of size N + 1.
Find n-th element in a series with only 2 digits (4 and 7) allowed | Set 2 (log(n) method)