这道题很简单,巧妙之处在于用两个数组,数组b用来存放各位的和,数组a用来标记各位的和,保证数组b没有重复的,之后适用sort函数,默认升序排列,直接输出即可。感觉这道题应该值15分的,哈哈。
#include <iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
using namespace std;
int a[10001] = {0}, b[10001];//a标记,b是存各位数字的和
int main()
{
int n,m,k=0,sum;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> m;
if (m > 0 && m < 10) {
sum = m;
if (a[sum] != 1) {
a[sum] = 1;
b[k] = sum;
k++;
}
}
else if (m >= 10 && m < 100) {
sum = m / 10 + m % 10;
if (a[sum] != 1) {
a[sum] = 1;
b[k] = sum;
k++;
}
}
else if (m >= 100 && m < 1000) {
int bai = m / 100;
sum = bai + (m - bai * 100) / 10 + m % 10;
if (a[sum] != 1) {
a[sum] = 1;
b[k] = sum;
k++;
}
}
else if (m >= 1000) {
int qian = m / 1000;
int bai = (m - qian * 1000) / 100;
int shi = (m - qian * 1000 - bai * 100) / 10;
sum = qian + bai + shi + m % 10;
if (a[sum] != 1) {
a[sum] = 1;
b[k] = sum;
k++;
}
}
}
sort(b, b + k);
cout << k << endl;
cout << b[0];
for (int i = 1; i < k; i++)
cout << " " << b[i];
}