这道题也不难,记录下来是对比一下,自己的解法和别人用set的解法,熟悉一下set的用法。
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
int N, a;
int hashTable[50] = {0};
scanf("%d", &N);
while (N--) {
int temp = 0;
scanf("%d", &a);
while (a) {
temp += a % 10;
a = a / 10;
}
hashTable[temp] = 1;
}
int ans = 0;
for (int i = 0; i < 50; i++) {
if (hashTable[i] != 0) {
ans++;
}
}
printf("%d\n", ans);
int j = 0;
for (int i = 0; i < 50; i++) {
if (hashTable[i] != 0) {
j++;
printf("%d", i);
if (j < ans) {
printf(" ");
}
}
}
return 0;
}
网上看到别人用的set,更简练一些。
#include<iostream>
#include<set>
using namespace std;
int digitTotal(int n) {
int total = 0;
while (n) {
total += n % 10;
n /= 10;
}
return total;
}
int main() {
int N, a;
set<int> ansSet;
scanf("%d", &N);
while (N--) {
scanf("%d", &a);
ansSet.insert(digitTotal(a));
}
printf("%d\n", ansSet.size());
for (auto it = ansSet.begin(); it != ansSet.end(); it++) {
if (it != ansSet.begin())
printf(" ");
printf("%d", *it);
}
return 0;
}
我觉得值得我学习的地方用三处
- 函数的封装
- set的使用
- auto的使用