题目描述
给你N个整数(n<=100),每个数都在(0~1000)之间,其中有很多重复的数字,请将重复的数字只保留一个,并将剩下的数由小到大排序并输出。
输入格式
输入有2行,
第1行为1个正整数,表示数的个数:N
第2行有N个用空格隔开的整数。
输出格式
第1行为1个正整数M,表示不相同数的个数。
接下来的M行,每行一个整数,表示从小到大排好序的不相同的数。
样例
输入#1
10
20 40 32 67 40 20 89 300 400 15
输出#1
8
15
20
32
40
67
89
300
400
思路比较简单,可以使用数组标记
AC代码见下:
#include<bits/stdc++.h>
using namespace std;
int n,syp,flag[1001],ans[1001],cnt;
int main(){
cin>>n;
for(int i=1;i<=n;i++) {//桶排序
cin>>syp;
flag[syp]++;
}
for(int i=0;i<=1000;i++){
if(flag[i]>=1) {//遍历存入
cnt++;
ans[i]+=i;
}
}
cout<<cnt<<endl;
for(int i=0;i<=1000;i++){
if(ans[i]!=0) {
cout<<ans[i]<<endl;
}
}
return 0;
}//完美结束
本题用了三次for循环,比较耗时
若有改进方法的朋友可以在评论区提建议哈