这道题的关键在于如何把数据量较大的数组简化为数据量较小的数组,由于人的年龄在0到100之间,我们只需将大于100的均归到100即可,再引入一个标记数组看某些年龄段是否有人存在。
代码如下:
#include <stdio.h>
#include <string.h>
int old[5000001];
int main(){
int n,i,j,vis[104],b[104];
scanf("%d",&n);
memset(vis,0,sizeof(vis));
memset(b,0,sizeof(b));
for(i=0;i<n;i++){
scanf("%d",&old[i]);
if(old[i]>=100){
vis[100]=1;
b[100]++;
}
else{
vis[old[i]]=1;
b[old[i]]++;
}
}
for(i=0;i<=100;i++){
if(vis[i]){
printf("%d %d\n",i,b[i]);
}
}
return 0;
}

本文介绍了一种用于统计大量人群年龄分布的高效算法。通过将年龄数据简化并使用标记数组记录各年龄段的人数,实现了快速统计。该方法适用于年龄范围固定的情况。
393

被折叠的 条评论
为什么被折叠?



