Skip to content
Programmingoneonone
Programmingoneonone
  • CS Subjects
    • Internet of Things (IoT)
    • Digital Communication
    • Human Values
    • Cybersecurity
  • Programming Tutorials
    • C Programming
    • Data structures and Algorithms
    • 100+ Java Programs
    • 100+ C Programs
  • HackerRank Solutions
    • HackerRank Algorithms Solutions
    • HackerRank C problems solutions
    • HackerRank C++ problems solutions
    • HackerRank Java problems solutions
    • HackerRank Python problems solutions
Programmingoneonone
Programmingoneonone

HackerEarth Sum of sum of digits problem solution

YASH PAL, 31 July 2024
In this HackerEarth Sum of sum of digits problem solution Monk likes math problems very much. His math teacher taught him about sum of digits of a number. He decided to experiment a little with them.
Given a number, he recursively finds the sum of its digits till it becomes a single digit number. He calls this as Digit-Value of a number “
It can be written as :
sumOfDigits(n):
    if n is a single digit number:
        return n
    else:
        x = sum of the digits of n
        return sumOfDigits(x)
After seeing his interest in this concept, his teacher gave him an interesting problem, that uses the above function defined by him. She gave him an array A of N different numbers. Then she asks him Q queries. In each query, he has to form a set of K numbers from the array and find the sum of Digit-Values of those K numbers. This sum is called the value of that set.
The queries are of the following type :
1 K : Monk must output the maximum value of a set of size K, that can be obtained, as described above.
2 K : Monk must output the minimum value of a set of size K, that can be obtained, as described above.
Monk needs your help to complete this task.
HackerEarth Sum of sum of digits problem solution

HackerEarth Sum of sum of digits problem solution.

#include <bits/stdc++.h>
using namespace std;

#define TRACE
#ifdef TRACE
#define TR(...) __f(#__VA_ARGS__, __VA_ARGS__)
template <typename Arg1>
void __f(const char* name, Arg1&& arg1){
cerr << name << " : " << arg1 << std::endl;
}
template <typename Arg1, typename... Args>
void __f(const char* names, Arg1&& arg1, Args&&... args){
const char* comma = strchr(names + 1, ',');cerr.write(names, comma - names) << " : " << arg1<<" | ";__f(comma+1, args...);
}
#else
#define TR(...)
#endif

typedef long long LL;
typedef vector < int > VI;
typedef pair < int,int > II;
typedef vector < II > VII;

#define MOD 1000000007
#define EPS 1e-12
#define N 200100
#define PB push_back
#define MP make_pair
#define F first
#define S second
#define ALL(v) v.begin(),v.end()
#define SZ(a) (int)a.size()
#define FILL(a,b) memset(a,b,sizeof(a))
#define SI(n) scanf("%d",&n)
#define SLL(n) scanf("%lld",&n)
#define PLLN(n) printf("%lldn",n)
#define PIN(n) printf("%dn",n)
#define REP(i,j,n) for(LL i=j;i<n;i++)
#define PER(i,j,n) for(LL i=n-1;i>=j;i--)
#define endl 'n'
#define fast_io ios_base::sync_with_stdio(false);cin.tie(NULL)

#define FILEIO(name)
freopen(name".in", "r", stdin);
freopen(name".out", "w", stdout);

inline int mult(int a , int b) { LL x = a; x *= LL(b); if(x >= MOD) x %= MOD; return x; }
inline int add(int a , int b) { return a + b >= MOD ? a + b - MOD : a + b; }
inline int sub(int a , int b) { return a - b < 0 ? MOD - b + a : a - b; }
LL powmod(LL a,LL b) { if(b==0)return 1; LL x=powmod(a,b/2); LL y=(x*x)%MOD; if(b%2) return (a*y)%MOD; return y%MOD; }

int f(LL x) {
if(x < 10) return x;
string s = to_string(x);
LL y = 0;
for(char i : s)
y += int(i-'0');
return f(y);
}

LL a[N];
LL pref[N];
int main() {
int n,q; SI(n); SI(q);
assert(n <= int(1e5));
assert(q <= int(1e5));
set <LL> S;
REP(i,1,n+1) {
SLL(a[i]);
assert(a[i] <= LL(1e18));
assert(!S.count(a[i]));
S.insert(a[i]);
}
REP(i,1,n+1) a[i] = f(a[i]);
sort(a+1,a+n+1);
REP(i,1,n+1) pref[i] = pref[i-1] + a[i];
while(q--) {
int t,k; SI(t); SI(k);
assert(t >= 1 && t <= 2);
assert(k >= 1 && k <= n);
if(t == 1)
PLLN(pref[n] - pref[n-k]);
else
PLLN(pref[k]);
}
return 0;
}

Second solution

#include<bits/stdc++.h>
#define inf 1e18
#define ll long long
using namespace std;
int main()
{
int n,q;
cin>>n>>q;
assert(n>=1 && n<=100000);
assert(q>=1 && q<=100000);
int dv[100005];
map<ll,int>mp;
for(int i=0;i<n;i++)
{
ll temp;
cin>>temp;
assert(!mp[temp]);
mp[temp]++;
assert(temp>=1 && temp<=inf);
int ans;
if(temp<10)ans=temp;
while(temp>=10)
{
ll val=temp;ans=0;
while(val)
{
ans+=val%10;
val/=10;
}
temp=ans;
}
dv[i]=ans;
//cout<<dv[i]<<"n";
}
int pre[100005];
sort(dv,dv+n);
pre[0]=dv[0];
for(int i=1;i<n;i++)
pre[i]=pre[i-1]+dv[i];
while(q--)
{
int type;
int k;
cin>>type>>k;
assert(type==1 || type==2);
assert(k>=1 && k<=n);
if(type==1)
(k==n)?cout<<pre[n-1]<<"n":cout<<pre[n-1]-pre[n-(k+1)]<<"n";
else
cout<<pre[k-1]<<"n";
}
return 0;
}
coding problems solutions

Post navigation

Previous post
Next post

Are you a student and stuck with your career or worried about real-time things, and don't know how to manage your learning phase? Which profession to choose? and how to learn new things according to your goal, and land a dream job. Then this might help to you.

Hi My name is YASH PAL, founder of this Blog and a Senior Software engineer with 5+ years of Industry experience. I personally helped 40+ students to make a clear goal in their professional lives. Just book a one-on-one personal call with me for 30 minutes for 300 Rupees. Ask all your doubts and questions related to your career to set a clear roadmap for your professional life.

Book session - https://wa.me/qr/JQ2LAS7AASE2M1

Pages

  • About US
  • Contact US
  • Privacy Policy

Follow US

  • YouTube
  • LinkedIn
  • Facebook
  • Pinterest
  • Instagram
©2026 Programmingoneonone | WordPress Theme by SuperbThemes