ZJNU——统计数字(1402)

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
#include
#include
#include
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);
	}
}


 

你可能感兴趣的:(模拟题)