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

【题解】直方图

亿万年的星光5年前 (2021-05-01)题解目录5001

直方图(histogram.cpp)

【题目描述】

给定一个非负整数数组,统计里面每一个数的出现次数。我们只统计到数组里面最大的数。

假设Fmax(Fmax<10000)是数组里最大的数,那么我们只统计{0,1,2...Fmax}里每个数出现的次数。

【输入描述】

第一行n个数组的大小,1<=n<=10000

紧接着一行是数组的n个元素。

【输出描述】

按顺序输出每个数的出现次数,一行一个数。如果没有出现,则输出0。对于例子中的数组,最大的数是3,因此我们只统计{0,1,2,3}的出现频数。

【样例输入】

5
1 1 2 3 1


【样例输出】

0
3
1
1


【题目分析】

  • 非常经典的桶排使用方法,a[x]++操作就能完成排序工作

  • 统计只到max每个数出现的次数,只需要我们在计算过程中把最大数统计出来即可。



【参考代码1】

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int n;
    cin>>n;
    int a[10001];//定义数组
    int  Fmax=-1;//定义最大的数
    for(int i=0; i<n; i++)
    {
        cin>>a[i];
        if(Fmax<=a[i])
            Fmax=a[i];//找出最大的数
    }
    int b[10001];//声明计数数组
    memset(b,0, sizeof(b));//初始化数组
    for(int i=0; i<n; i++)
    {
        b[a[i]]++;//统计出现的次数
    }
    for(int i=0; i<=Fmax; i++)
    {
        cout<<b[i]<<endl;
    }

    return 0;
}


【参考代码2】

#include<iostream>
using namespace std; 
int main() 
{
    int n,x;
    int a[10001]={0};
    int max=-9999,flag;
    int i;
    
    /*桶排的思想*/
    
    cin>>n;//输入数组大小n
    for(i=1;i<=n;i++)
    {
        cin>>x;//输入元素
    	a[x]++;
        if(x>max)
            max=x;//记录最大值
    }
    for(i=0;i<=max;i++)//输出到max为止的频数
    	cout<<a[i]<<endl;
    
    return 0;
}


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

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

    标签: 模拟桶排
    分享给朋友:

    相关文章

    【题解】黑色联通块

    【题解】黑色联通块

    【题目描述】输入一个n×n的黑白图像(1表示黑色,0表示白色),任务是统计其中黑色连通块的个数。如果两个黑格子有公共边或者公共顶点,就说它们属于同一个联通块。如下图所示的图形有3个联通块。【输入描述】...

    【题解】最大平方因子

    【题目描述】给定一个整数 n,请找出 n 的最大平方因子。所谓平方因子,就是一个 n 的因子,且是一个完全平方数。最大平方因子就是 n&nb...

    绝对素数

    【题目描述】如果一个自然数是素数,且它的数字位置经过对换后仍为素数,则称为绝对素数,例如13。试求出所有二位绝对素数。【输入描述】无【输出描述】所有二位绝对素数(由小到大,一个数一行)。【输入样例】无...

    【题解】取数

    【题目描述】设有N 个正整数(1 <= N <= 50),其中每一个均是大于等于1、小于等于300的数。从这N个数中任取出若干个数(不能取相邻的数),要求得到一种取法,使得到的和为最大。例...

    字符串移位包含问题

    【题目描述】对于一个字符串来说,定义一次循环移位操作为:将字符串的第一个字符移动到末尾形成新的字符串。给定两个字符串 s_1s1 和 s_2s2,要求判定其中一个字符串是...

    【题解】循环比赛日程表

    【题解】循环比赛日程表

    【题目描述】设有N个选手进行循环比赛,其中N=2M,要求每名选手要与其他N-1名选手都赛一次,每名选手每天比赛一次,循环赛共进行N-1天,要求每天没有选手轮空。【输入描述】输入:M。【输出描述】输出:...