2022 年 3 月青少年软编等考 C 语言五级真题解析

目录

  • T1. 寻找边缘
    • 思路分析
  • T2. 数字变换
  • T3. 42 点
  • T4. Project Summer 游戏
    • 思路分析

T1. 寻找边缘

给定一张 R × C R\times C R×C 的地图,由 XO 组成。

现在需要重新处理这张地图,找到地图边缘的那些 O。你需要将这些地图边缘上的 O 保留下来,然后将其他的 O 全部替换为 X

地图边缘的 O 指的是那些处于第一行 / 列或最后一行 / 列上的 O,以及从这些 O 的相邻位置(上下左右)延伸出去的 O

时间限制:1 s
内存限制:64 MB

  • 输入
    第一行是一个正整数 T T T,表示一共有 T T T 组数据。
    对于每组数据,其第一行是两个正整数 R R R C C C,表示地图的大小,用一个空格分开。接下来的 R R R 行,每行包含了 C C C 个字符,分别是 XO。其中, 0 < T ≤ 10 0 < T \le 10 0<T10 0 < R , C ≤ 500 0 < R, C \le 500 0<R,C500
  • 输出
    对于每组数据,输出 R R R 行,每行包含了 C C C 个字符,分别是 XO。每组数据之间需要额外输出一个空行。
  • 样例输入
    2
    2 3
    OXX
    XXO
    5 5
    XXXOX
    XXXOX
    XOOXX
    XXOXX
    XOXXX
    
  • 样例输出
    OXX
    XXO
    
    XXXOX
    XXXOX
    XXXXX
    XXXXX
    XOXXX
    

思路分析

此题考查二维数组模拟法,属于入门题。

可以先将边缘上的 O 标记为 1 1 1,然后从第 2 2 2 行、第 2 2 2 列开始,从上到下、自左向右依次检测每一个位置。如果该位置是 O,并且周围四个方向存在一个标记,则说明该位置与边缘连通,于是也将其标记为 1 1 1。最后遍历输出,对于没有标记的 O,输出 X,其余位置不变。

/*
 * Name: T1.cpp
 * Problem: 寻找边缘
 * Author: Teacher Gao.
 * Date&Time: 2025/02/07 16:00
 */

#include 

using namespace std;

int main()
{
   
    ios::sync_with_stdio(false);
    cin.tie(0);

    int T;
    cin >> T;

    while (T--) {
   
        int R, C;
        char a[505][505];
        bool f[505][505] = {
   0};
        cin >> R >> C;
        for (int i = 1; i <= R; i++) {
   
            for (int j = 1; j <= C; j++)

你可能感兴趣的:(青少年软编等考,C,语言题解集(五级),c语言,开发语言,c++,算法,青少年编程,学习,题解)