1.题目
某次科研调查时得到了n个自然数,每个数均不超过1500000000 (1.5×109)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。
输入
第1行是整数n,表示自然数的个数;
第2~n+l每行一个自然数。
输出
共m行(m为n个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。
- 样例输入
8
2
4
2
4
5
100
2
100 - 样例输出
2 3
4 2
5 1
100 2
2.分析
这个题因为数据过大,不能用桶排序,所以我们只能考虑最简单(应该有别的好办法,但是我想到的是这样)的暴力法,我们先用sort函数将这个数列排好顺序,然后依次输出,用一个巧妙的判断来判断相同的数有几个,代码见下图,注意最后一个数和第一个数要经过特殊处理
3.代码
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int a[1000005];
int n,i,k,cnt=0,j;
int main()
{
cin>>n;
for(i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n);
for(i=0;i<n;i++)
{
if(i==0)
{
j=a[i];
cnt=1;
continue;
}
if(j!=a[i])
{
cout<<j<<" "<<cnt<<endl;
j=a[i];
cnt=1;
}
else if(j==a[i])cnt++;
}
cout<<j<<" "<<cnt<<endl;
return 0;
}
喜欢的话加个关注吧,我是wanna_ac