算法竞赛入门经典训练指南打卡
题目链接:UVA 11462
思路
对于这种数据量大但是数据的范围比较小的情况最适合用桶排序
设置一个长为105的数组,遇见第i岁的人,则ages[i] ++
最后只用遍历数组输出对应个数的年龄即可
具体细节看代码注释
代码如下:
#include <iostream>
#include <cstring>
#define ton(i , n) for(int i = 0 ; i < n ; ++ i)
using namespace std ;
int ages[105] ;
int main(){
int n , x ;
while (cin >> n && n){
memset(ages , 0 , sizeof(ages)) ; //每次使用之后将数组清零放置影响下一次运算
ton(i , n){
cin >> x ;
ages[x] ++ ; //对应年龄的人数 + 1
}
int first = 1 ; //查看是否是第一个
for(int i = 1 ; i <= 100 ; ++ i){
if(ages[i] != 0){ //说明有该年龄的人。且人数为ages[i]个
for(int j = 0 ; j < ages[i] ; ++ j){
if(first){ //如果是第一个。则前面不输出空格
cout << i ;
first = 0 ;
}
else
cout << " " << i ; //前面输出空格隔开两个数据
}
}
}
cout << endl ;
}
return 0 ;
}