统计数字(1068)

输入:第1行是整数n(1<=n<=200000,表示自然数的个数,第2~n+1行每行一个自然数。

统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。

输出:每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。


解:把输入的数据存到一个数组,sort排序之后统计出现次数同时输出。

如果开二维数组或者结构体,只存不重复的自然数和出现次数最后排序输出,存入时查找很麻烦,而且会超时。

#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
int n,i,sum=1,g[200001];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&g[i]);
sort(g,g+n);
for(i=1;i<n;i++)
{
if(g[i]==g[i-1])
sum++;
else
{
printf("%d %d\n",g[i-1],sum);
sum=1;
}
}
printf("%d %d\n",g[i-1],sum);
return 0;
}
/*
8
2
4
2
4
5
100
2
100
*/

例解:

while(scanf("%d",&n)!=EOF){
for(int i=0;i<n;i++) scanf("%d",&f);
sort(f,f+n);
for(int i=0;i<n;i++){
int num=1;
while(f==f[i+1]){
i++;num++;
}
printf("%d %d\n",f,num);
}
}


猜你喜欢

转载自blog.csdn.net/huadu_bjfu/article/details/42780791