1. 程式人生 > >PAT 1066

PAT 1066

1066 影象過濾 (15 分)

影象過濾是把影象中不重要的畫素都染成背景色,使得重要部分被凸顯出來。現給定一幅黑白影象,要求你將灰度值位於某指定區間內的所有畫素顏色都用一種指定的顏色替換。

輸入格式:

輸入在第一行給出一幅影象的解析度,即兩個正整數 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
#include <cstdio>
using namespace std;
const int maxM = 500;
const int maxN = 500;
int mat[maxM][maxN];
void print(int val, int A, int B, int val0)
{
    if(val>=A&&val<=B) printf("%03d", val0);
    else printf("%03d", val);
}
int main()
{
    int M, N, A, B, val0;
    scanf("%d%d%d%d%d", &M, &N, &A, &B, &val0);
    for(int i=0; i<M; i++)
    {
        for(int j=0; j<N; j++)
            scanf("%d", &mat[i][j]);
    }
    for(int i=0; i<M; i++)
    {
        print(mat[i][0], A, B, val0);
        for(int j=1; j<N; j++)
        {
            printf(" ");
            print(mat[i][j], A, B, val0);
        }
        printf("\n");
    }
    return 0;
}