1066 图像过滤(15 分)
图像过滤是把图像中不重要的像素都染成背景色,使得重要部分被凸显出来。现给定一幅黑白图像,要求你将灰度值位于某指定区间内的所有像素颜色都用一种指定的颜色替换。
输入格式:
输入在第一行给出一幅图像的分辨率,即两个正整数 M 和 N(0
输出格式:
输出按要求过滤后的图像。即输出 M 行,每行 N 个像素灰度值,每个灰度值占 3 位(例如黑色要显示为 000),其间以一个空格分隔。行首尾不得有多余空格。
输入样例:
3 5 100 150 0
3 189 254 101 119
150 233 151 99 100
88 123 149 0 255
输出样例:
003 189 254 000 000
000 233 151 099 000
088 000 000 000 255
很简单的一道题,但是学到了一些新的东西,就把它写下来
1.用cin来读取输入的话在极端的情况下会超时,所以尽量用scanf。在代码中如果先用cin读入数字到数组中,再处理不会超时,但是如果直接cin数字然后处理就会超时。
2.处理带空格回车的输出可以用 printf(“%03d%c”, num[j], j == N - 1 ? ‘\n’ : ’ ‘); 这种格式来输出,简单明了
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int M,N,A,B,D;
cin>>M>>N>>A>>B>>D;
int num[N];
int tempnum;
for(int i=0;i<M;i++)
{
for(int j=0;j<N;j++)
{
cin>>num[j];
}
for(int j=0;j<N;j++)
{
//scanf("%d", &D); //用cin会超时
// cin>>tempnum;
// if(A <= tempnum &&tempnum <= B) tempnum = D;
// printf("%03d%c", tempnum, j == N - 1 ? '\n' : ' ');
if(A <= num[j] && num[j] <= B) num[j] = D;
printf("%03d%c", num[j], j == N - 1 ? '\n' : ' ');
}
}
}