1.9.9

09:直方图

总时间限制:
1000ms
内存限制:
65536kB
描述

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

假设 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
 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cmath>
 4 #include<cstring>
 5 using namespace std;
 6 int Max(int[],int);
 7 int main()
 8 {
 9     int n;
10     scanf("%d",&n);
11     int a[n];
12     for(int i=0;i<n;i++)
13     scanf("%d",&a[i]);
14     int x=Max(a,n);
15     int b[x+1];
16     memset(b,0,sizeof(b));
17     for(int i=0;i<n;i++)
18     {
19         if(a[i]<=x)b[a[i]]++;
20     }
21     for(int i=0;i<=x;i++)
22     printf("%d\n",b[i]);
23     return 0;
24 }
25 int Max(int a[],int n)
26 {
27     int s=a[0];
28     for(int i=0;i<n;i++)
29         if(s<a[i])s=a[i];
30         return s;
31 }

时间: 2024-12-15 08:34:35