「PAT乙级真题解析」Basic Level 1066 图像过滤 (问题分析+完整步骤+伪代码描述+提交通过代码)

十分常规的一个问题, 题目给定一个场景, 要求按照题设要求, 将满足条件的值进行指定处理, 所以这可以认为是模拟题, 只需要将题设要求翻译成代码即可. 题设给定一副图像(/矩阵/二维数组), 要求检查每一个点的值是否在给定的两个值之间, 如果是则替换成指定值. 最后输出处理后的图像(/矩阵/二维数组)

#算法#数据结构#需求分析#pat考试#c语言

Table of Contents

乙级的题目训练主要用来熟悉编程语言的语法和形成良好的编码习惯和编码规范。从小白开始逐步掌握用编程解决问题。

PAT乙级BasicLevelPractice 1066 图像过滤

问题分析

十分常规的一个问题, 题目给定一个场景, 要求按照题设要求, 将满足条件的值进行指定处理, 所以这可以认为是模拟题, 只需要将题设要求翻译成代码即可. 题设给定一副图像(/矩阵/二维数组), 要求检查每一个点的值是否在给定的两个值之间, 如果是则替换成指定值. 最后输出处理后的图像(/矩阵/二维数组)

完整描述步骤

  1. 获取输入: 行数, 列数, 值应该落在的区间的两个端点值, 替换值
  2. 获取输入: 图像
  3. 对于图像的每一行:
    • 对于该行每一列:
      • 检查该行该列位置的点值是否大于等于区间左端点, 且小于等于区间右端点
        • 如果是, 则将该点的值替换为指定值
  4. 输出每一行每一列的值

伪代码描述

  1. get input: row_amount, col_amount, min_value, max_value, replacement
  2. for each row:
    • for each col:
      • get input: image[row][col]
      • if min_value <= image[row][col] <= max_value:
        • image[row][col] = replacement;
      • print(image[row][col])

完整提交代码

/*
# 问题分析
十分常规的一个问题, 题目给定一个场景, 要求按照题设要求, 将满足条件的值进行指定处理, 所以这可以认为是模拟题, 只需要将题设要求翻译成代码即可.
题设给定一副图像(/矩阵/二维数组), 要求检查每一个点的值是否在给定的两个值之间, 如果是则替换成指定值.
最后输出处理后的图像(/矩阵/二维数组)
 
# 完整描述步骤
1. 获取输入: 行数, 列数, 值应该落在的区间的两个端点值, 替换值
2. 获取输入: 图像
3. 对于图像的每一行:
    - 对于该行每一列:
        - 检查该行该列位置的点值是否大于等于区间左端点, 且小于等于区间右端点
            - 如果是, 则将该点的值替换为指定值
3. 输出每一行每一列的值
 
# 伪代码描述
1. get input: row_amount, col_amount, min_value, max_value, replacement
2. for each row:
    - for each col:
        - get input: image[row][col]
        - if min_value <= image[row][col] <= max_value:
            - image[row][col] = replacement;
        - print(image[row][col])
*/
 
# include<stdio.h>
 
int main(){
    int row_amount, col_amount, min_value, max_value, replacement;
    scanf("%d %d %d %d %d", &row_amount, &col_amount, &min_value, &max_value, &replacement);
    
    int image[row_amount][col_amount];
    int pixel;
    for (int i = 0; i < row_amount; i++){
        for (int j = 0; j < col_amount; j++){
            scanf("%d", &pixel);
            image[i][j] = pixel >= min_value && pixel <= max_value ? replacement : pixel;
        }
    }
 
    for (int i = 0; i < row_amount; i++){
        printf("%03d", image[i][0]);
        for (int j = 1; j < col_amount; j++){
            printf(" %03d", image[i][j]);
        }
        printf("\n");
    }
    return 0;
}
「PAT乙级真题解析」Basic Level 1066 图像过滤 (问题分析+完整步骤+伪代码描述+提交通过代码) | 生活糖果