Description
某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。
Input
第1行是整数n,表示自然数的个数。
第2~n+1行每行一个自然数。
Output
包含m行(m为n个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。
Sample Input
8 2 4 2 4 5 100 2 100
Sample Output
2 3 4 2 5 1 100 2
我一开始看到还以为要用map来做,其实不用map也可以啊。
就是开一个大于10000的数组,然后把数字存进去,并且用sort排序一遍(因为它是要从小到大排序)。
要判断该数出现的次数的话,那么就判断它是否和前面那个数相等就好了,如果相等,计数器加1;如果不相等,那么计数器清零,然后再进行自增。
#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> using namespace std; __int64 a[10002]; int main(){ int n,i,j,k,ans; while(scanf("%d",&n)!=EOF){ ans=1; memset(a,0,sizeof(a)); for(i=1;i<=n;i++) scanf("%I64d",&a[i]); sort(a+1,a+n+1); for(i=2;i<=n;i++){ if(a[i]==a[i-1]) ans++; else if(a[i]!=a[i-1]) {printf("%I64d %d\n",a[i-1],ans); ans=1;} } printf("%I64d %d\n",a[i-1],ans); } }
时间: 2024-10-09 23:43:44