Number with even sum of digits

A positive integer is considered a good number if sum of its digits is even. Find n-th smallest good number.

Examples :

Input :  n = 1
Output : 2
First good number is smallest positive
number with sum of digits even which is 2.

Input : n = 10
Output : 20

A simple solution is to start from 1 and traverse through all natural numbers. For every number x, check if sum of digits is even. If even increment count of good numbers. Finally return the n-th Good number.

An efficient solution is based on a pattern in the answer. Let us list down first 20 good numbers. The first 20 good numbers are: 2, 4, 6, 8, 11, 13, 15, 17, 19, 20, 22, 24, 26, 28, 31, 33, 35, 37, 39, 40. Observe that if last digit of n is from 0 to 4 the answer is 2*n and if last digit of n is from 5 to 9 the answer is 2*n + 1.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to find n-th
// Good number.
#include <bits/stdc++.h>
using namespace std;
  
// Function to find kth good number.
long long int findKthGoodNo(long long int n)
{
    // Find the last digit of n.
    int lastDig = n % 10;
  
    // If last digit is between 
    // 0 to 4 then return 2 * n.
    if (lastDig >= 0 && lastDig <= 4)
        return n << 1;
  
    // If last digit is between 
    // 5 to 9 then return 2*n + 1.
    else
        return (n << 1) + 1;
}
  
// Driver code
int main()
{
    long long int n = 10;
    cout << findKthGoodNo(n);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to find n-th
// Good number.
class GFG 
{
      
    // Function to find kth good number.
    static int findKthGoodNo(int n)
    {
          
        // Find the last digit of n.
        int lastDig = n % 10;
  
        // If last digit is between 
        // 0 to 4 then return 2*n.
        if (lastDig >= 0 && lastDig <= 4)
            return n << 1;
  
        // If last digit is between 
        // 5 to 9 then return 2*n + 1.
        else
            return (n << 1) + 1;
    }
  
    // Driver code
    public static void main(String[] args)
    {
        int n = 10;
          
        System.out.println(findKthGoodNo(n));
    }
}
  
// This code is contributed by
// Smitha Dinesh Semwal

chevron_right


Python 3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python 3 program to find
# n-th Good number.
  
# Function to find kth 
# good number.
def findKthGoodNo(n):
  
    # Find the last digit of n.
    lastDig = n % 10
  
    # If last digit is between 
    # 0 to 4 then return 2 * n.
    if (lastDig >= 0 and lastDig <= 4) :
        return n << 1
  
    # If last digit is between 
    # 5 to 9 then return 2 * n + 1.
    else:
        return (n << 1) + 1
  
  
# Driver code
n = 10
print(findKthGoodNo(n))
  
# This code is contributed by
# Smitha Dinesh Semwal

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to find n-th
// Good number.
using System;
  
class GFG
{
      
    // Function to find kth
    // good number
    public static int findKthGoodNo(int n)
    {
          
        // Find the last digit of n.
        int lastDig = n % 10;
  
        // If last digit is between
        // 0 to 4 then return 2*n.
        if (lastDig >= 0 && lastDig <= 4)
            return n << 1;
  
        // If last digit is between 
        // 5 to 9 then return 2*n + 1.
        else
            return (n << 1) + 1;
    }
      
    // Driver code
    static public void Main (string []args)
    {
        int n = 10;
        Console.WriteLine(findKthGoodNo(n));
    }
}
  
// This code is contributed by Ajit.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to find n-th 
// Good number.
  
// Function to find kth 
// good number.
function findKthGoodNo($n)
{
    // Find the last digit of n.
    $lastDig = $n % 10;
  
    // If last digit is between 
    // 0 to 4 then return 2*n.
    if ($lastDig >= 0 && $lastDig <= 4)
        return $n << 1;
  
    // If last digit is between 
    // 5 to 9 then return 2*n + 1.
    else
        return ($n << 1) + 1;
}
  
// Driver code
$n = 10;
echo(findKthGoodNo($n));
  
// This code is contributed by Ajit.
?>

chevron_right


Output:

20

Time Complexity: O(1)
Auxiliary Space: O(1)



My Personal Notes arrow_drop_up

A Programmer and A Machine learning Enthusiast

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.