直方图 - 计蒜客题目
程序员文章站
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;
}
我们下一篇博客见~
如果喜欢别忘了点赞哦!