题目:https://pintia.cn/problem-sets/994805260223102976/problems/994805267416334336
经验总结:
用数组做标记,由于给的数据最大为9999,各数字之和不超过40,所以定义N为40(强迫症取整)
初始化一个长度为N,值全为0的数组。
输入的同时判断这个数各数字之和为下标的数组中值是否为0,若为0,代表这个“朋友证号”为第一次出现,将这个“朋友证号”为下标的值设为1,并count++,代表不同的“朋友证号”个数加一。
C++代码:
#include<bits/stdc++.h>
#define N 40
using namespace std;
int fun(int a) {
int ans = 0;
while(a) {
ans += a%10;
a /= 10;
}
return ans;
}
int main() {
int n,count = 0;
int ans[N] = {0};
cin>>n;
while(n--) {
int a;
cin>>a;
int sum = fun(a);
if(ans[sum]==0) {
ans[sum]=1;
count++;
}
}
cout<<count<<endl;
bool flag = true;
for(int i=0; i<N; i++) {
if(ans[i] == 1&&flag) {
cout<<i;
flag = false;
} else if(ans[i] == 1) {
cout<<" "<<i;
}
}
return 0;
}