欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

直方图 - 计蒜客题目

程序员文章站 2022-07-12 09:07:45
...

直方图

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

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

输入格式
第一行 n 是数组的大小。1≤n≤10000。

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

输出格式
按顺序输出每个数的出现次数,一行一个数。如果没有出现过,则输出 0。

对于例子中的数组,最大的数是 33,因此我们只统计 {0,1,2,3} 的出现频数。

输出时每行末尾的多余空格,不影响答案正确性

样例输入

5
1 1 2 3 1

样例输出

0
3
1
1

思路:
首先我们需要找到一个数组中的最大数, 之前已经说过关于怎么找一个数组中最大的数的方法了, 可以看一看我之前的博客, 先上代码:

    int maxnum=-0x3f3f3f3f;
    for(int i=0;i<n;i++){
        maxnum=max(maxnum,num[i]);
    }
    return maxnum;

然后我们需要从num数组中寻找0-maxnum出现的个数, 代码:

    for(int i=0;i<=maxnum;i++){
        int tot=0;
        for(int j=0;j<n;j++){
            if(num[j]==i){
                tot++;
            }
        }
        cout<<tot<<endl;
    }

然后这道题就解的差不多了, 下面上AC代码

代码:

#include<iostream>
using namespace std;
int num[10010];
int maxset(int n){
    int maxnum=-0x3f3f3f3f;
    for(int i=0;i<n;i++){
        maxnum=max(maxnum,num[i]);
    }
    return maxnum;
}
int main(){
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>num[i];
    }
    int maxnum=maxset(n);
    for(int i=0;i<=maxnum;i++){
        int tot=0;
        for(int j=0;j<n;j++){
            if(num[j]==i){
                tot++;
            }
        }
        cout<<tot<<endl;
    }
    return 0;
}

我们下一篇博客见~
如果喜欢别忘了点赞哦!

相关标签: c++

上一篇: 字符串排列

下一篇: 矩阵乘法