学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!
附上汇总贴:小猴编程C++ | 汇总-CSDN博客
【题目描述】
小猴对一个数的数位之和很感兴趣,今天他要按照数位之和给序列 a 1 , a 2 , … , a n a_1,a_2,\dots,a_n a1,a2,…,an排序。当两个数各个数位之和不同时,将数位和较小的排在前面,当数位之和相等时,将数值小的排在前面。
例如,1001排在99前面,因为1001的数位之和时2,而99的数位之和18。
又如,2排在1101前面,因为它们的数位之和相同,而2小于101。
请你帮助小猴完成这个任务。
【输入】
第一行一个正整数n;
第二行n个正整数 a 1 , a 2 , … , a n a_1,a_2,\dots,a_n a1,a2,…,an。
【输出】
一行,空格隔开的n个整数,表示排序之后的序列。
【输入样例】
5
2 4 1 5 3
【输出样例】
1 2 3 4 5
【代码详解】
#include <bits/stdc++.h>
using namespace std;
int a[1000010];
int cal(int x)
{
int sum = 0;
while (x>0) {
sum += x % 10;
x /= 10;
}
return sum;
}
bool cmp(int x, int y)
{
if (cal(x)!=cal(y)) return cal(x)<cal(y);
return x < y;
}
int main()
{
int n;
cin >> n;
for (int i=1; i<=n; i++) cin >> a[i];
sort(a+1, a+n+1, cmp);
for (int i=1; i<=n; i++) cout << a[i] << " ";
return 0;
}
【运行结果】
5
2 4 1 5 3
1 2 3 4 5