L1-054 福到了(Java)

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

输入格式:

输入在第一行中给出倒过来的汉字所用的字符、以及网格的规模 N (不超过100的正整数),其间以 1 个空格分隔;随后 N 行,每行给出 N 个字符,或者为 @ 或者为空格。

输出格式:

输出倒置的网格,如样例所示。但是,如果这个字正过来倒过去是一样的,就先输出bu yong dao le,然后再用输入指定的字符将其输出。

输入样例 1:

$ 9@  @@@@@
@@@  @@@ @   @ @ 
@@@  @@@ 
@@@ @@@@@
@@@ @ @ @
@@@ @@@@@@  @ @ @@  @@@@@

输出样例 1:

$$$$$  $ 
$ $ $  $ 
$$$$$ $$$
$ $ $ $$$
$$$$$ $$$$$$  $$$$ $   $ $$$  $$$
$$$$$  $

输入样例 2:

& 3
@@@@ 
@@@

输出样例 2:

bu yong dao le
&&&& 
&&&

解题思路

这个问题是关于二维数组的操作,具体来说是一个字符矩阵的旋转。旋转矩阵可以通过两种方式来实现:直接旋转或者通过对称操作。由于这里需要的是倒置(即180度旋转),我们可以通过翻转行和翻转列的方式来实现。

具体步骤如下:

  1. 读入字符和网格大小N。
  2. 读入N行字符,构建字符矩阵。
  3. 检查矩阵是否对称,即正着和倒着是否一样。如果是,输出"bu yong dao le"。
  4. 使用指定字符重新构建矩阵。首先,将每个 '@' 替换为输入的字符,然后对行和列进行翻转。

解题过程中遇到的问题

对于字符矩阵旋转这类题目有什么技巧吗?

字符矩阵旋转这类题目的关键在于理解二维数组的索引操作和旋转后每个元素的新位置。这类问题通常涉及到数组的行列交换、反转或者对称性操作。以下是一些处理这类问题的技巧:

  1. 理解旋转规则
    • 90度旋转:对于矩阵中的元素 matrix[i][j],在顺时针旋转90度后,它将移动到 matrix[j][n-1-i] 的位置(其中 n 是矩阵的大小)。
    • 180度旋转:元素 matrix[i][j] 会移动到 matrix[n-1-i][n-1-j]
    • 270度旋转:元素 matrix[i][j] 会移动到 matrix[n-1-j][i]
  1. 使用辅助数组
    • 当旋转矩阵时,最简单的方法是使用一个辅助数组来存储旋转后的结果,然后再将这个结果复制回原数组。这样可以避免在原地修改时出现的复杂情况。
  1. 原地旋转
    • 对于要求原地旋转的问题,你需要小心地交换元素的位置。通常这会涉及到多步交换过程,需要仔细设计以避免覆盖某些元素。
  1. 分层处理
    • 对于正方形矩阵,可以将矩阵看作由若干层环形结构组成,从外层向内层逐层旋转。每一层可以单独处理。
  1. 矩阵对称性
    • 对于一些特殊的旋转(如180度),可以利用矩阵的对称性。例如,180度旋转本质上就是关于中心的对称。

代码

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);char replacementChar = scanner.next().charAt(0);int N = scanner.nextInt();scanner.nextLine();  // 消费换行符char[][] grid = new char[N][N];for (int i = 0; i < N; i++) {String line = scanner.nextLine();for (int j = 0; j < N; j++) {grid[i][j] = line.charAt(j);}}if (isSymmetric(grid)) {System.out.println("bu yong dao le");}for (int i = N - 1; i >= 0; i--) {for (int j = N - 1; j >= 0; j--) {System.out.print(grid[i][j] == '@' ? replacementChar : ' ');}System.out.println();}}private static boolean isSymmetric(char[][] grid) {int N = grid.length;for (int i = 0; i < N; i++) {for (int j = 0; j < N; j++) {if (grid[i][j] != grid[N - 1 - i][N - 1 - j]) {return false;}}}return true;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/640829.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在linux部署Prometheus+Grafana+Exporter监控系统性能

Prometheus、Grafana和Report组件是什么&#xff1f; Prometheus、Grafana和Exporter是常用于系统监控和指标收集的组合。 Prometheus是一种开源的系统监控和警报工具。它可以收集各种指标数据&#xff0c;并提供强大的查询语言和灵活的警报规则&#xff0c;用于实时监控系统…

Prometheus配置Grafana监控大屏(Docker)

拉取镜像 docker pull grafana/grafana挂载目录 mkdir /data/prometheus/grafana -p chmod 777 /data/prometheus/grafana临时启动 docker run -d -p 3000:3000 --name grafana grafana/grafana从容器拷贝配置文件至对应目录 docker exec -it grafana cat /etc/grafana/gra…

Java中遍历Map

方法多种多样&#xff0c;其实大差不差~ 通过 键值集&#xff08;entrySet&#xff09;遍历 System.out.println("Ⅰ、使用 entrySet() 方法遍历&#xff1a;"); for (Map.Entry<String, String> entry : map.entrySet()) {String key entry.getKey();Strin…

Linux之安装配置CentOS7+换源

目录 一. 安装CentOS7 二. 配置CentOS7 三. 查看、设置IP地址 3.1 查看IP地址 3.2 设置IP地址 四. 使用Xshell连接Linux客户端 4.1 Xshell的下载 4.2 Xshell的使用 五. 换软件源 一. 安装CentOS7 博主是在虚拟机中进行安装的&#xff0c;大家也可以在虚拟机中跟着尝试一…

已解决Error:AttributeError: module ‘numpy‘ has no attribute ‘int‘.

文章目录 引言报错分析解决方案1&#xff1a;降低NumPy版本解决方案2&#xff1a;更改NumPy源码 结尾 引言 在Python编程中&#xff0c;NumPy是一个不可或缺的库&#xff0c;尤其在处理大规模数值计算时。但即使是这个强大的工具&#xff0c;也可能在使用过程中遇到问题。其中…

Qt —— 编写Windows截图软件(附源码)

示例效果 源码1 #include "maskwidget.h" #include "qapplication.h"MaskWidget *MaskWidg

Ubuntu 22.04 LTS 安装使用腾达(Tenda) W311MIv6 AX300 无线网卡

安装教程&#xff1a;腾达&#xff08;Tenda&#xff09;W311MIv6 AX300无线网卡Linux系统安装方法_腾达(Tenda)官方网站 问题解答&#xff1a;腾达(Tenda) W311MIv6 网卡常见问题解答&#xff1f;_腾达(Tenda)官方网站 注意&#xff1a;如果电脑连手机热点上网&#xff0c;手…

ZigBee学习(一)

文章目录 一、ZigBee介绍二、IEEE 802.15.42.1 物理层2.2 MAC层2.3 如何实现网络和设备寻址2.4 能量管理 三、ZigBee网络拓扑结构四、ZigBee配置参数 一、ZigBee介绍 ZigBee是一种基于IEEE 802.15.4标准的高级通信协议&#xff0c;它被设计用于低速率、低功耗和短距离无线通信&…

YOLOv8 视频识别

YOLOv8 是一种目标检测算法&#xff0c;用于识别视频中的物体。要控制视频识别中的帧&#xff0c;可以通过以下方式来实现&#xff1a; 设置帧率&#xff1a;可以通过设置视频的帧率来控制视频的播放速度&#xff0c;从而影响视频识别的速度。 跳帧处理&#xff1a;可以通过跳…

《移动通信原理与应用》——QPSK调制解调仿真

目录 一、QPSK调制与解调流程图&#xff1a; 二、仿真运行结果&#xff1a; 三、MATLAB仿真代码&#xff1a; 一、QPSK调制与解调流程图&#xff1a; QPSK调制流程图&#xff1a; QPSK解调流程图&#xff1a; 二、仿真运行结果&#xff1a; 1、Figure1:为发送端比特流情…

探索设计模式的魅力:一次设计,多次利用,深入理解原型模式的设计艺术

原型模式是一种设计模式&#xff0c;属于创建型模式的一种&#xff0c;它用于创建重复的对象&#xff0c;同时又能保持性能。在原型模式中&#xff0c;通过复制现有对象的原型来创建新对象&#xff0c;而不是通过实例化类来创建对象。这样做可以避免耗费过多的资源开销&#xf…

python-自动篇-办公-用Excel画画

文章目录 代码所遇问题ModuleNotFoundError: No module named xlsxwriterFileNotFoundError: [Errno 2] No such file or directory: 111.jpg 效果附件图片excel 代码 # coding: utf-8from PIL import Image from xlsxwriter.workbook import Workbookclass ExcelPicture(obje…

使用双异步后,如何保证数据一致性?

目录 一、前情提要二、通过Future获取异步返回值1、FutureTask 是基于 AbstractQueuedSynchronizer实现的2、FutureTask执行流程3、get()方法执行流程 三、FutureTask源码具体分析1、FutureTask源码2、将异步方法的返回值改为Future<Integer>&#xff0c;将返回值放到new…

详细分析对比copliot和ChatGPT的差异

Copilot 和 ChatGPT 是两种不同的AI工具&#xff0c;分别在不同领域展现出了强大的功能和潜力&#xff1a; GitHub Copilot 定位与用途&#xff1a;GitHub Copilot 是由GitHub&#xff08;现为微软子公司&#xff09;和OpenAI合作开发的一款智能代码辅助工具。它主要集成于Visu…

如何使用Pycharm社区免费版创建Django项目

对于python开发者来说&#xff0c;pycharm无疑是一款非常好用的开发ide,她有两个版本&#xff0c;一个社区版&#xff08;免费&#xff09;&#xff0c;一个个人版&#xff08;收费&#xff09;。 免费版如果使用Django创建web项目那么就会提示需要升级到收费版本&#xff0c;…

1.21 day6 IO网络编程

网络聊天室 服务端 #include <myhead.h> #define PORT 8888 #define IP "192.168.122.48" struct MSG {char tyep;char name[20];char buf[128]; }; typedef struct Node {struct sockaddr_in cin;struct Node*next; }*node;int main(int argc, const char *…

提升认知,推荐15个面向开发者的中文播客

前言 对于科技从业者而言&#xff0c;无论是自学成才的程序员&#xff0c;还是行业资深人士&#xff0c;终身学习是很有必要的&#xff0c;尤其是在这样一个技术快速迭代更新的时代。 作为一个摆脱了时间和空间限制的资讯分享平台&#xff0c;播客&#xff08;Podcast&#x…

检查一个Java List是否包含某个JavaBean对象的特定值,并且获取这个值

import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { // 创建一个新的ArrayList List<MyBean> list new ArrayList<MyBean>(); // 添加一些元素 list.add(new MyBean("apple", …

42 漏洞发现-操作系统之漏洞探针类型利用修复

目录 系统漏洞发现意义?漏洞类型危害情况?如何做好未卜先知?相关名词解释:漏洞扫描工具演示-Goby&#xff0c;Nmap&#xff0c;Nessus(操作)漏洞类型区分讲解-权限提升,远程执行等(思路)漏洞利用框架演示-Metasploit,Searchsploit等(操作)漏洞修复方案讲解说明-补丁,防护软件…

go和swoole性能比较

开发效率 Go语言是本质上是静态语言&#xff0c;开发效率稍差&#xff0c;但性能更强&#xff0c;更适合底层软件的开发 Swoole使用PHP语言&#xff0c;动态脚本语言&#xff0c;开发效率最佳&#xff0c;更适合应用软件的开发 IO模型 go语言使用单线程eventloop处理IO事件&…