扫描所有像素并累加对应灰度值的频次数组。
OJ: shumeng
题目 ID: CSP202104A
难度:入门
标签:模拟计数
日期: 2026-07-31 16:21
形式化题目
给出一幅
思路
直方图就是按灰度值分桶的频次数组。
统计步骤
- 开一个长度为
的计数数组; - 读到灰度值
时执行 count[x]++; - 最后按灰度从小到大输出每个桶的计数。
图像的二维结构不影响统计过程,逐像素读入并累加即可。
代码
cpp
/**
* Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
* rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
* rainboy的学习导航网站: https://idx.roj.ac.cn
* create_at: 2026-07-31 16:21
* update_at: 2026-08-17 22:39
*/
#include <bits/stdc++.h>
using namespace std;
const int MAXL = 260;
int n, m, levels;
int count_value[MAXL]; // count_value[x] 记录灰度值为 x 的像素个数
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m >> levels;
// 逐个读入像素,累加对应灰度值的频次
for (int i = 0; i < n * m; i++) {
int value;
cin >> value;
count_value[value]++;
}
// 按灰度值从小到大输出频次
for (int i = 0; i < levels; i++) {
if (i) cout << ' ';
cout << count_value[i];
}
cout << '\n';
return 0;
}复杂度
扫描全部
总结
直方图就是按值分桶的频次数组,图像行列结构不影响统计过程。