L1-054 福到了(15 分)[java][python]

题目描述

"福"字倒着贴,寓意"福到"。不论到底算不算民俗,本题请你编写程序,把各种汉字倒过来输出。这里要处理的每个汉字是由一个 N × N 的网格组成的,网格中的元素或者为字符 @ 或者为空格。而倒过来的汉字所用的字符由裁判指定。


输入输出格式

项目 说明
输入格式 第一行:指定字符 + 空格 + N(≤100 的正整数);随后 N 行,每行 N 个字符(@ 或空格)
输出格式 倒置的网格;若字正过来倒过去相同,先输出 bu yong dao le 再输出网格

样例

输入样例 1:

复制代码
$ 9
@ @@@@@
@@@ @@@
@ @ @
@@@ @@@
@@@ @@@@@
@@@ @ @ @
@@@ @@@@@
@ @ @ @
@ @@@@@

输出样例 1:

复制代码
$$$$$ $
$ $ $ $
$$$$$ $$$
$ $ $ $$$
$$$$$ $$$
$$$ $$$
$ $ $
$$$ $$$
$$$$$ $

输入样例 2:

复制代码
& 3
@@@
@ @
@@@

输出样例 2:

复制代码
bu yong dao le
&&&
& &
&&&

解题思路

核心操作:网格倒置(旋转 180°)

倒置即坐标变换:(i, j) → (n-1-i, n-1-j)

算法步骤:

  1. 读取输入 :读取指定字符 c 和网格大小 n,再读取 n 行字符串
  2. 判断对称 :遍历网格,检查每个位置 a[i][j]a[n-1-i][n-1-j] 是否相同。如果全部相同,说明字倒过来和原来一样
  3. 输出结果
    • 如果对称:先输出 bu yong dao le
    • 无论如何都输出倒置后的网格(将 @ 替换为指定字符,空格保持不变)

关键点:

  • 读取网格时每行末尾的空格需要保留,可以用 list(line).append(' ') 补齐到 n 个
  • 对称判断:只需遍历左上三角即可(因为 (i,j)(n-1-i,n-1-j) 配对)
  • 字符替换:倒置网格中 a[n-1-i][n-1-j]@ 时输出指定字符

代码实现

Java 代码

java 复制代码
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String repStr = scanner.next();
        char replaceChar = repStr.charAt(0);
        int n = scanner.nextInt();
        scanner.nextLine();

        char[][] a = new char[n][n];
        for (int i = 0; i < n; i++) {
            String line = scanner.nextLine();
            // 补齐空格使每行达到 n 个字符
            while (line.length() < n) {
                line += " ";
            }
            for (int j = 0; j < n; j++) {
                a[i][j] = line.charAt(j);
            }
        }

        // 判断是否对称(倒过来和原来相同)
        boolean symmetric = true;
        for (int i = 0; i < n && symmetric; i++) {
            for (int j = 0; j < n; j++) {
                if (a[i][j] != a[n - 1 - i][n - 1 - j]) {
                    symmetric = false;
                    break;
                }
            }
        }

        if (symmetric) {
            System.out.println("bu yong dao le");
        }

        // 输出倒置后的网格
        for (int i = 0; i < n; i++) {
            StringBuilder sb = new StringBuilder();
            for (int j = 0; j < n; j++) {
                char ch = a[n - 1 - i][n - 1 - j];
                sb.append(ch == '@' ? replaceChar : ' ');
            }
            System.out.println(sb.toString());
        }

        scanner.close();
    }
}

Python 代码

python 复制代码
def main():
    rep, n = input().split()
    n = int(n)
    a = []
    for _ in range(n):
        line = input()
        # 补齐空格到 n 个字符
        line = list(line.ljust(n))
        a.append(line)

    # 判断是否对称
    symmetric = all(a[i][j] == a[n - 1 - i][n - 1 - j] for i in range(n) for j in range(n))

    if symmetric:
        print("bu yong dao le")

    # 输出倒置网格
    for i in range(n):
        row = ""
        for j in range(n):
            ch = a[n - 1 - i][n - 1 - j]
            row += rep if ch == '@' else ' '
        print(row)

if __name__ == "__main__":
    main()

运行验证

样例 1 验证

输入:

复制代码
$ 9
@ @@@@@
@@@ @@@
@ @ @
@@@ @@@
@@@ @@@@@
@@@ @ @ @
@@@ @@@@@
@ @ @ @
@ @@@@@

Python 输出:

复制代码
$$$$$ $
$ $ $ $
$$$$$ $$$
$ $ $ $$$
$$$$$ $$$
$$$ $$$
$ $ $
$$$ $$$
$$$$$ $

样例 2 验证

输入:

复制代码
& 3
@@@
@ @
@@@

Python 输出:

复制代码
bu yong dao le
&&&
& &
&&&

复杂度分析

  • 时间复杂度:O(N²),遍历两次 N×N 网格(对称判断 + 输出)
  • 空间复杂度:O(N²),存储整个网格

总结

本题考察二维数组的读取、坐标变换和字符串处理。核心在于:

  1. 倒置坐标映射(i, j) → (n-1-i, n-1-j),即中心对称翻转
  2. 对称判断 :只需检查 a[i][j] == a[n-1-i][n-1-j],利用配对关系减少比较次数
  3. 空格处理:读取时需要补齐空格到 n 个字符,否则网格会错位
相关推荐
FreakStudio8 小时前
硬件版【Cursor】?aily blockly IDE尝鲜封神,实战硬伤尽显
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
澈2078 小时前
C++并查集:高效解决连通性问题
java·c++·算法
测试员周周10 小时前
【Appium 系列】第06节-页面对象实现 — LoginPage 实战
开发语言·前端·人工智能·python·功能测试·appium·测试用例
旖-旎10 小时前
深搜练习(单词搜索)(12)
c++·算法·深度优先·力扣
2401_8734794010 小时前
运营活动被薅羊毛怎么防?用IP查询+设备指纹联动封堵漏洞
java·网络·tcp/ip·github
ShiJiuD66688899910 小时前
大事件板块一
java
摇滚侠10 小时前
@Autowired 和 @Resource 的区别
java·开发语言
2301_7838486510 小时前
优化文本分类中堆叠模型的网格搜索性能:避免训练卡顿的实战指南
jvm·数据库·python
SeaTunnel10 小时前
(八)收官篇 | 数据平台最后一公里:数据集成开发设计与上线治理实战
java·大数据·开发语言·白鲸开源
企客宝CRM11 小时前
2026年中小企业CRM选型指南:企客宝CRM处于什么位置?
android·算法·企业微信·rxjava·crm