Count of groups having largest size while grouping according to sum of its digits
Last Updated :
12 Sep, 2022
Given an integer N, the task is to find the number of groups having the largest size. Each number from 1 to N is grouped according to the sum of its digits.
Examples:
Input: N = 13
Output: 4
Explanation:
There are 9 groups in total, they are grouped according to the sum of its digits of numbers from 1 to 13: [1, 10] [2, 11] [3, 12] [4, 13] [5] [6] [7] [8] [9].
Out of these, 4 groups have the largest size that is 2.
Input: n = 2
Output: 2
Explanation:
There are 2 groups in total. [1] [2] and both the groups have largest size 1.
Approach: To solve the problem mentioned above we need to create a dictionary whose key represents the unique sum of digits of numbers from 1 to N. The values of those keys will keep count how many numbers have the sum equal to its key. Then we will print the highest value among all of them.
Below is the implementation of the above approach:
C++
// C++ implementation to Count the
// number of groups having the largest
// size where groups are according
// to the sum of its digits
#include <bits/stdc++.h>
using namespace std;
// function to return sum of digits of i
int sumDigits(int n){
int sum = 0;
while(n)
{
sum += n%10;
n /= 10;
}
return sum;
}
// Create the dictionary of unique sum
map<int,int> constDict(int n){
// dictionary that contain
// unique sum count
map<int,int> d;
for(int i = 1; i < n + 1; ++i){
// calculate the sum of its digits
int sum1 = sumDigits(i);
if(d.find(sum1) == d.end())
d[sum1] = 1;
else
d[sum1] += 1;
}
return d;
}
// function to find the
// largest size of group
int countLargest(int n){
map<int,int> d = constDict(n);
int size = 0;
// count of largest size group
int count = 0;
for(auto it = d.begin(); it != d.end(); ++it){
int k = it->first;
int val = it->second;
if(val > size){
size = val;
count = 1;
}
else if(val == size)
count += 1;
}
return count;
}
// Driver code
int main()
{
int n = 13;
int group = countLargest(n);
cout << group << endl;
return 0;
}
Java
// Java implementation to Count the
// number of groups having the largest
// size where groups are according
// to the sum of its digits
import java.util.HashMap;
import java.util.Map;
class GFG{
// Function to return sum of digits of i
public static int sumDigits(int n)
{
int sum = 0;
while(n != 0)
{
sum += n % 10;
n /= 10;
}
return sum;
}
// Create the dictionary of unique sum
public static HashMap<Integer, Integer> constDict(int n)
{
// dictionary that contain
// unique sum count
HashMap<Integer, Integer> d = new HashMap<>();
for(int i = 1; i < n + 1; ++i)
{
// Calculate the sum of its digits
int sum1 = sumDigits(i);
if (!d.containsKey(sum1))
d.put(sum1, 1);
else
d.put(sum1, d.get(sum1) + 1);
}
return d;
}
// Function to find the
// largest size of group
public static int countLargest(int n)
{
HashMap<Integer, Integer> d = constDict(n);
int size = 0;
// Count of largest size group
int count = 0;
for(Map.Entry<Integer, Integer> it : d.entrySet())
{
int k = it.getKey();
int val = it.getValue();
if (val > size)
{
size = val;
count = 1;
}
else if (val == size)
count += 1;
}
return count;
}
// Driver code
public static void main(String[] args)
{
int n = 13;
int group = countLargest(n);
System.out.println(group);
}
}
// This code is contributed by divyeshrabadiya07
Python3
# Python3 implementation to Count the
# number of groups having the largest
# size where groups are according
# to the sum of its digits
# Create the dictionary of unique sum
def constDict(n):
# dictionary that contain
# unique sum count
d ={}
for i in range(1, n + 1):
# convert each number to string
s = str(i)
# make list of number digits
l = list(s)
# calculate the sum of its digits
sum1 = sum(map(int, l))
if sum1 not in d:
d[sum1] = 1
else:
d[sum1] += 1
return d
# function to find the
# largest size of group
def countLargest(n):
d = constDict(n)
size = 0
# count of largest size group
count = 0
for k, val in d.items():
if val > size:
size = val
count = 1
elif val == size:
count += 1
return count
# Driver Code
n = 13
group = countLargest(n)
print(group)
# This code is contributed by Sanjit_Prasad
C#
// C# implementation to Count the
// number of groups having the largest
// size where groups are according
// to the sum of its digits
using System;
using System.Collections.Generic;
class GFG {
// Function to return sum of digits of i
static int sumDigits(int n)
{
int sum = 0;
while(n != 0)
{
sum += n % 10;
n /= 10;
}
return sum;
}
// Create the dictionary of unique sum
static Dictionary<int, int> constDict(int n)
{
// dictionary that contain
// unique sum count
Dictionary<int, int> d = new Dictionary<int, int>();
for(int i = 1; i < n + 1; ++i)
{
// Calculate the sum of its digits
int sum1 = sumDigits(i);
if (!d.ContainsKey(sum1))
d.Add(sum1, 1);
else
d[sum1] += 1;
}
return d;
}
// Function to find the
// largest size of group
static int countLargest(int n)
{
Dictionary<int, int> d = constDict(n);
int size = 0;
// Count of largest size group
int count = 0;
foreach(KeyValuePair<int, int> it in d)
{
int k = it.Key;
int val = it.Value;
if (val > size)
{
size = val;
count = 1;
}
else if (val == size)
count += 1;
}
return count;
}
// Driver code
static void Main()
{
int n = 13;
int group = countLargest(n);
Console.WriteLine(group);
}
}
// This code is contributed by divyesh072019
JavaScript
// JS implementation to Count the
// number of groups having the largest
// size where groups are according
// to the sum of its digits
// function to return sum of digits of i
function sumDigits(n){
let sum = 0;
while(n > 0)
{
sum += n%10;
n = Math.floor(n / 10);
}
return sum;
}
// Create the dictionary of unique sum
function constDict( n){
// dictionary that contain
// unique sum count
let d = {};
for(var i = 1; i < n + 1; ++i){
// calculate the sum of its digits
var sum1 = sumDigits(i);
if(!d.hasOwnProperty(sum1))
d[sum1] = 1;
else
d[sum1] += 1;
}
return d;
}
// function to find the
// largest size of group
function countLargest( n){
let d = constDict(n);
let size = 0;
// count of largest size group
let count = 0;
for (let [k, val] of Object.entries(d))
{
k = parseInt(k)
val = parseInt(val)
if(val > size){
size = val;
count = 1;
}
else if(val == size)
count += 1;
}
return count;
}
// Driver code
let n = 13;
let group = countLargest(n);
console.log(group);
// This code is contributed by phasing17
Time Complexity: O(N)
Auxiliary Space: O(N)
Similar Reads
Count of largest sized groups while grouping according to product of digits Given an integer N, the task is to find the number of groups having the largest size. Each number from 1 to N is grouped according to the product of its digits.Examples: Input: N = 13 Output: 3 Explanation: There are 9 groups in total, they are grouped according to the product of its digits of numbe
7 min read
Find the size of largest group where groups are according to the xor of digits Given an integer N and the task is to find the size of the largest group in a range 1 to N, where two numbers belong to the same group if xor of its digits is the same. Examples: Input: N = 13 Output: 2 Explanation: There are 10 groups in total, they are grouped according to the xor of its digits of
14 min read
Count digit groupings of a number with given constraints We are given a string consisting of digits, we may group these digits into sub-groups (but maintaining their original order). The task is to count the number of groupings such that for every sub-group except the last one, the sum of digits in a sub-group is less than or equal to the sum of the digit
15+ min read
Construct the largest number whose sum of cost of digits is K Given a positive integer K, and an array arr[] consisting of N( =9) integers such that arr[i] represents the cost of the digit (i+1), the task is to find the largest number that can be formed using the digits over the range [1, 9] such that the sum of the cost of digits of the number formed is K. Ex
11 min read
Count of integers from the range [0, N] whose digit sum is a multiple of K Given two integers n and k, the task is to calculate the number of integers in the range [0, n] whose digit sum is a multiple of k.Examples: Input: n = 10, k = 5 Output: 2 Explanation: 0 and 5 are the only possible integers.Input: n = 30, k = 4 Output: 7 Table of ContentUsing Brute Force Method - O(
9 min read