PAT 乙级 1066 图像过滤(15) C++版

1066. 图像过滤(15)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue

图像过滤是把图像中不重要的像素都染成背景色,使得重要部分被凸显出来。现给定一幅黑白图像,要求你将灰度值位于某指定区间内的所有像素颜色都用一种指定的颜色替换。

输入格式:

输入在第一行给出一幅图像的分辨率,即两个正整数M和N(0 < M, N <= 500),另外是待过滤的灰度值区间端点A和B(0 <= A < B <= 255)、以及指定的替换灰度值。随后M行,每行给出N个像素点的灰度值,其间以空格分隔。所有灰度值都在[0, 255]区间内。

输出格式:

输出按要求过滤后的图像。即输出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 // 1066.cpp : 定义控制台应用程序的入口点。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include<iostream>
 6 #include<iomanip>
 7 
 8 using namespace std;
 9 
10 int main()
11 {
12     int M, N, A, B, Num;
13 
14     cin >> M >> N >> A >> B >> Num;
15 
16     int *p = new int[M*N];
17 
18     for (int i = 0; i < M*N; i++)
19     {
20         cin >> p[i];
21 
22         if (p[i] >= A&&p[i] <= B)
23             p[i] = Num;
24     }
25 
26     for (int i = 0; i < M*N; i++)
27     {
28         cout.width(3);
29         cout.fill('0');
30         cout << p[i];
31 
32         if (0 != (i + 1) % N)
33             cout << " ";
34         else
35             cout << endl;
36     }
37 
38     delete[] p;
39 
40     return 0;
41 }
原文地址:https://www.cnblogs.com/cdp1591652208/p/7136898.html