【PAT乙級】1066 影像過濾

陌巷舊雨發表於2020-11-19

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

輸入格式
輸入在第一行給出一幅影像的解析度,即兩個正整數 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

C++程式碼

#include <bits/stdc++.h>
using namespace std;
int main(){
    int m, n, a, b, value;
    cin>>m>>n>>a>>b>>value;
    for(int i = 0; i < m; i++){
        for(int j = 0; j < n; j++){
            int t;
            scanf("%d",&t);
            if(a <= t && t <= b){
                printf("%.3d",value);
            }else{
                printf("%.3d",t);
            }
            if(j != n-1) printf(" ");
        }
        if(i != m-1) printf("\n");
    }
    return 0;
}

Tips
使用cin輸入執行效率較低:
這裡兩重for迴圈中如果使用cin輸入最後一個測試點執行超時,換成scanf輸入就AC了。

相關文章