Number of N digit integers with weight W
Given N, the number of digits of an integer which is greater than or equal to 2 and a weight W. The task is to find the count of integers that have N digits and weight W.
Note: Weight is defined as the difference between the consecutive digits of an integer.
Examples:
Input : N = 2, W = 3
Output : 6
Input : N = 2, W = 4
Output : 5
In the above example, the total possible 2 digit integers with a weight equal to 3 will be 6. Like the number 14 has weight 3 (4-1) and 25, 36, 47, 58, 69 has weight 3. If we see it carefully we’ll find the logic that if we increment the weight as 5 of a 2-digit number, then the total possible such numbers will be 5. With weight 6 of a 2-digit number, the total possible numbers will be 4 and then 3 and so on. Also, if we increase the number of digits. Say, n equal to 3 with weight 3, then the total possible numbers will be 60 and 600 for n equal to 4 with weight 3 and so on.
Number of digits | Weight —> Total possible such numbers
2|2 —> 7 |
2|3 —> 6 |
2|4 —> 5 |
2|5 —> 4 |
2|6 —> 3 |
2|7 —> 2 |
2|8 —> 1 |
3|2 —> 70 |
3|3 —> 60 |
3|4 —> 50 |
3|5 —> 40 |
3|6 —> 30 |
3|7 —> 20 |
3|8 —> 10 |
4|2 —>700 |
4|3 —>600 |
4|4 —>500 |
4|5 —>400 |
4|6 —>300 |
4|7 —>200 |
4|8 —>100 |
As you can see in the above table that with an increase in the number of digits, the number of numbers with weight ‘w’ is following a pattern, where it is changing in the multiple of 10^(n-2), where ‘n’ is the number of digits.
Below is the step by step algorithm to solve this problem:
- Check if the given Weight(W) is Positive or Negative.
- Subtract Weight(W) from 9 if positive.
- Add Weight to 10 if it is negative and then update the new weight.
- For n digit integer, multiply 10^(n-2) with this updated weight.
- This will give us the number of integers satisfying this weight.
Below is the implementation of above approach:
C++
#include <iostream>
#include<cmath>
using namespace std;
int findNumbers( int n, int w)
{
int x = 0, sum = 0;
if (w >= 0 && w <= 8) {
x = 9 - w;
}
else if (w >= -9 && w <= -1) {
x = 10 + w;
}
sum = pow (10, n - 2);
sum = (x * sum);
return sum;
}
int main()
{
int n, w;
n = 3, w = 4;
cout << findNumbers(n, w);;
return 0;
}
|
Java
class GFG
{
static int findNumbers( int n, int w)
{
int x = 0 , sum = 0 ;
if (w >= 0 && w <= 8 )
{
x = 9 - w;
}
else if (w >= - 9 && w <= - 1 )
{
x = 10 + w;
}
sum = ( int )Math.pow( 10 , n - 2 );
sum = (x * sum);
return sum;
}
public static void main(String args[])
{
int n, w;
n = 3 ;
w = 4 ;
System.out.println(findNumbers(n, w));
}
}
|
Python3
def findNumbers(n, w):
x = 0 ;
sum = 0 ;
if (w > = 0 and w < = 8 ):
x = 9 - w;
elif (w > = - 9 and w < = - 1 ):
x = 10 + w;
sum = pow ( 10 , n - 2 );
sum = (x * sum );
return sum ;
n = 3 ;
w = 4 ;
print (findNumbers(n, w));
|
C#
using System;
class GFG
{
static int findNumbers( int n, int w)
{
int x = 0, sum = 0;
if (w >= 0 && w <= 8)
{
x = 9 - w;
}
else if (w >= -9 && w <= -1)
{
x = 10 + w;
}
sum = ( int )Math.Pow(10, n - 2);
sum = (x * sum);
return sum;
}
static public void Main ()
{
int n, w;
n = 3;
w = 4;
Console.WriteLine(findNumbers(n, w));
}
}
|
PHP
<?php
function findNumbers( $n , $w )
{
$x = 0; $sum = 0;
if ( $w >= 0 && $w <= 8)
{
$x = 9 - $w ;
}
else if ( $w >= -9 && $w <= -1)
{
$x = 10 + $w ;
}
$sum = pow(10, $n - 2);
$sum = ( $x * $sum );
return $sum ;
}
$n = 3; $w = 4;
echo findNumbers( $n , $w );
|
Javascript
<script>
function findNumbers(n, w)
{
let x = 0, sum = 0;
if (w >= 0 && w <= 8)
{
x = 9 - w;
}
else if (w >= -9 && w <= -1)
{
x = 10 + w;
}
sum = Math.pow(10, n - 2);
sum = (x * sum);
return sum;
}
let n, w;
n = 3;
w = 4;
document.write(findNumbers(n, w));
</script>
|
Time Complexity: O(log(n))
Auxiliary Space: O(1)
Last Updated :
04 Mar, 2023
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...