青少年编程知识记录 codecoming

【题解】统计自然数

【题目描述】

某次科研调查时得到了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年提高组

【题目分析】

  1.   桶排很难拿满分,数据太大了

  2. 可以先用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({});

作者:亿万年的星光 分类:题解目录 浏览: