试题描述:
某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。
输入:
包含n+1行;
第一行是整数n,表示自然数的个数;
第2~n+1每行一个自然数。
输出:
包含m行(m为n个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。
输入示例:
8
2
4
2
4
5
100
2
100
输出示例:
2 3
4 2
5 1
100 2
解题思路:
hash
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <iostream> using namespace std; int a[200001]; int read() //输入模板 { int x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9') { if(ch=='-') f=-1; ch=getchar(); } while(ch>='0'&&ch<='9') { x=x*10+ch-'0'; ch=getchar(); } return x*f; } int main() { int n,i,flag=0; scanf("%D",&n); for(i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n); for(i=0;i<n;i++) { if(a[i+1]!=a[i]) {printf("%d %d ",a[i],i-flag+1);flag=i+1;} } return 0; }