1. 程式人生 > >B1066 圖像過濾 (15分)

B1066 圖像過濾 (15分)

動態 ret 二維數組 cst null 很好 輸出格式 端點 include

B1066 圖像過濾 (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

思考

3 5 100 150 0 /* 3*5的分辨率  [100,150]的替換為0*/
3 189 254 101 119
150 233 151 99 100
88 123 149 0 255

printf("%03d", );
動態開辟二維數組。

C++ 動態開辟二維數組的的方法 - Java EE - 博客園 https://www.cnblogs.com/jpaorm/archive/2010/09/27/2509922.html

寫的很好啊。
想起來,2019屆的試題,考的那些int各種int,真是看得人眼花繚亂啊。

AC代碼

主要是學習了動態開辟二維數組的方法,雖然這題目肯定用不著這樣的開辟數組空間。
還有就是拒絕野指針的寫法。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdlib>
using namespace std;
int main(void){
    int m,n,a,b,con,i;
    scanf("%d %d %d %d %d",&m,&n,&a,&b,&con);
    //動態開辟數組
    int row, col;/*row行數,col列數*/
    int **gray_val = NULL; 
    row=m;
    col=n;
    gray_val = new int *[row];/*產生一個指針數組*/
    for (i = 0; i < row; i++)
    {
        gray_val[i] = new int[col];/*每個指針都開辟一個數組*/
    } 
    //輸入數組
    for (i = 0; i < row; i++)
    {
        for (int j = 0; j < col; j++)
        {
            scanf("%d",&gray_val[i][j]);
        }
    }

    //輸出數組
    //替換
    for (i = 0; i < row; i++)
    {
        for (int j = 0; j < col; j++)
        {
            if(gray_val[i][j]>=a&&gray_val[i][j]<=b) 
                gray_val[i][j] = con;
            printf("%03d",gray_val[i][j]);
            if(j<col-1)
                printf(" ");
        }
        printf("\n");
    } 
    //銷毀空間
    for (i = 0; i < row; i++)
    {
        delete []  gray_val[i];
        gray_val[i] = NULL;
    }
    delete []gray_val;
    gray_val = NULL;
    return 0;
}

B1066 圖像過濾 (15分)