「PAT乙级真题解析」Basic Level 1097 矩阵行平移 (问题分析+完整步骤+伪代码描述+提交通过代码)

题设给定了明确的步骤, 要求按照给定方式进行"平移"操作, 然后计算各行元素的和并输出。 计算各行元素之和以及输出元素和没有额外要求, 所以关键在于如何按照题设要求进行平移。

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

Table of Contents

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

PAT (Basic Level) Practice 1097 矩阵行平移

问题分析

  • 题设给定了明确的步骤, 要求按照给定方式进行"平移"操作, 然后计算各行元素的和并输出。
  • "计算各行元素之和"以及"输出元素和"两个操作题设没有额外要求, 所以关键在于如何按照题设要求进行平移。

题设要求的平移注意事项

  • 平移从第一行开始, 只对奇数行进行平移
  • 平移的距离等于进行平移过的次数
  • 由于同时设置了最大平移距离, 所以平移距离递增时需要先进行模运算然后再+1
  • 平移的时候需要从后往前操作, 防止数值覆盖

完整描述步骤

  1. 获取输入: 矩阵阶数(矩阵边长), 单行最大平移距离, 平移之后空出来的位置需要统一填充的数值
  2. 获取输入: 矩阵各个位置的初始值
  3. 初始化计数器:
    • 当前行需要平移的距离 = 1
  4. 对于每一个奇数行:
    • 从后往前, 将索引位置之前相隔 当前行需要平移的距离 的元素值移动到当前索引位置
    • 从前往后, 对 当前行需要平移的距离 数量的元素位置, 填充指定的值
    • 当前行需要平移的距离 +1
  5. 对与矩阵的每一行:
    • 计算各个元素之和
    • 输出各个元素之和

伪代码描述

  1. get input: size, max_pace, replacement
  2. get input: each element of matrix
  3. init recorder:
    • pace = 1
  4. for row_index in range(0, len(matrix), 2):
    • for column_index in range(len(matrix[0]) - 1, pace - 1, -1):
      • matrix[row_index][column_index] = matrix[row_index][column_index - pace]
    • for column_index in range(0, pace):
      • matrix[row_index][column_index] = replacement
  5. for row_index in range(0, len(matrix)):
    • print(sum(matrix[row_index]))

完整提交代码

/*
# 问题分析
题设给定了明确的步骤, 要求按照给定方式进行"平移"操作, 然后计算各行元素的和并输出。
计算各行元素之和以及输出元素和没有额外要求, 所以关键在于如何按照题设要求进行平移。
 
## 题设要求的平移注意事项
- 平移从第一行开始, 只对奇数行进行平移
- 平移的距离等于进行平移过的次数
- 由于同时设置了最大平移距离, 所以平移距离递增时需要先进行模运算然后再+1
- 平移的时候需要从后往前操作, 防止数值覆盖
 
# 完整描述步骤
1. 获取输入: 矩阵阶数(矩阵边长), 单行最大平移距离, 平移之后空出来的位置需要统一填充的数值
2. 获取输入: 矩阵各个位置的初始值
3. 初始化计数器:
    - 当前行需要平移的距离 = 1
4. 对于每一个奇数行:
    - 从后往前, 将索引位置之前相隔 当前行需要平移的距离 的元素值移动到当前索引位置
    - 从前往后, 对 当前行需要平移的距离 数量的元素位置, 填充指定的值
    - 当前行需要平移的距离 +1
5. 对与矩阵的每一行:
    - 计算各个元素之和
    - 输出各个元素之和
 
# 伪代码描述
1. get input: size, max_pace, replacement
2. get input: each element of matrix
3. init recorder:
    - pace = 1
4. for row_index in range(0, len(matrix), 2):
    - for column_index in range(len(matrix[0]) - 1, pace - 1, -1):
        - matrix[row_index][column_index] = matrix[row_index][column_index - pace]
    - for column_index in range(0, pace):
        - matrix[row_index][column_index] = replacement
5. for row_index in range(0, len(matrix)):
    - print(sum(matrix[row_index]))
*/
 
# include<stdio.h>
 
int main(){
    int size, max_pace, replacement;
    scanf("%d %d %d", &size, &max_pace, &replacement);
    
    int matrix[size][size];
    for (int i = 0; i < size; i++){
        for (int j = 0; j < size; j++){
            scanf("%d", &matrix[i][j]);
        }
    }
    
    int pace = 1;
    for (int i = 0; i < size; i = i + 2){
        for (int j = size - 1; j >= pace; j--){
            matrix[i][j] = matrix[i][j-pace];
        }
        for (int j = 0; j < pace; j++){
            matrix[i][j] = replacement;
        }
        pace = (pace % max_pace) + 1;
    }
 
    int sum;
    for (int j = 0; j < size; j++){
        sum = 0;
        for (int i = 0; i < size; i++){
            sum += matrix[i][j];
        }
        if ( j > 0){
            printf(" ");
        }
        printf("%d", sum);
    }
 
    return 0;
}
「PAT乙级真题解析」Basic Level 1097 矩阵行平移 (问题分析+完整步骤+伪代码描述+提交通过代码) | 生活糖果