当前位置:首页 > 题解目录 > 正文内容

【题解】统计自然数

亿万年的星光4年前 (2021-06-06)题解目录14802

【题目描述】

某次科研调查时得到了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;
}


扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

分享给朋友:

相关文章

【题解】亲戚

【题目描述】若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚。如果x,y是...

字符全排列

【题目描述】给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。我们假设对于小写字母有‘a’ <‘b’ < … <‘y’<‘z’,而且给定的字符串中的字母已经按照...

【题解】演讲大赛评分

【题目描述】最近"老王"很开心.他在大一的时候参加过数计学院的“软件小组”。告诉你个秘密,这个小组是个好地方,不但活动精彩而且有MM。 这不,这个小组举办了一个叫做“计算...

【题解】Crossing River

【题目描述】几个人过河,每次过两人一人回,速度由慢者决定,问过河所需最短时间。【输入描述】输入t组数据,每组数据第1行输入n,第2行输入n个数,表示每个人过河的时间。【输出描述】输出t行数据,每行1个...

【题解】运动员和训练师的最大匹配数

【题目描述】给你一个下标从 0 开始的整数数组 players ,其中 players[i] 表示第 i 名运动员的&n...

【题解】发工资

【题目描述】作为程序猿,最盼望的日子就是每月的9号了,因为这一天是发工资的日子,养家糊口就靠它了,呵呵但是对于公司财务处的工作人员来说,这一天则是很忙碌的一天,财务处的小李最近就在考虑一个问题:如果每...