【题解】统计自然数
【题目描述】
某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。
【输入描述】
输入包含n+1行: 第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
【来源】NOIP2007年提高组
【题目分析】
桶排很难拿满分,数据太大了
可以先用sort排完之后再处理数据
【参考答案1】
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; int a[200010],n,t=1; int main() { scanf("%d",&n); for(int i=1; i<=n; i++) scanf("%d",&a[i]); sort(a+1,a+n+1); for(int i=1; i<=n+1; i++) { if(a[i]==a[i-1]) ++t; else if(i!=1) { printf("%d %d\n",a[i-1],t); t=1; } } return 0; }
【参考答案2】
#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; }
(adsbygoogle = window.adsbygoogle || []).push({});