当前位置: 首页 > news >正文

AcWing 727. 菱形——像拼图一样做题

题目描述]


分析:

利用程序根据输入的整数,画出由字符*构成的该整数阶的实心菱形。给出一个示例: n = 7 n=7 n=7

      *       * * *     * * * * *   
* * * * * * * * * * * *   * * *     *       

我们将采取拆解问题,通过四个部分的组合最终拼出这个菱形。通过观察,可以看出不管给出的整数是多少,最终形成的图形一定是一由空格 和星星*构成个正方形(记为s)。如图1所示。
在这里插入图片描述

图1 正方形
#### 拼出第一部分-对角线 另外我们可以知道正方形有两条相交的对角线,它将正方形分成了四个相等的部分。如图2所示。

在这里插入图片描述

图2 对角线示意

基于此我们可以先将这两条对角线画出来,是不是就成功了一半了呢?这两条对角线也很容易画,一条线是 x = 3 ( n / 2 ) x=3(n/2) x=3(n/2),另一条是 y = n / 2 y=n/2 y=n/2。给出画对角线的代码:

	for (int i = 0; i < n; i ++) { // 画出十字架对角线for (int j = 0; j < n; j ++) {if (i == n / 2 || j == n / 2) res[i][j] = '*';}}

通过这一步画出的图形为:

      *       *       *       
* * * * * * * *       *       *       
拼出第二部分-左上角

有了这两条相交的对角线,我们只需要处理左上角需要描的点即可,然后利用相交的对角线通过关于 x x x轴对称与 y y y轴对称的方法映射到其他的三个区域!如图3所示。

在这里插入图片描述

图3 x、y映射

那么该怎么计算左上角的该描的点呢?我们可以观察这三个点的坐标 ( 1 , 2 ) , ( 2 , 1 ) , ( 2 , 2 ) {(1,2), (2,1), (2, 2)} (1,2),(2,1),(2,2),也可以表示为 ( 1 , n / 2 − 1 ) , ( 2 , 1 ) , ( 2 , n / 2 − 1 ) {(1,n/2-1), (2,1), (2, n/2-1)} (1,n/21),(2,1),(2,n/21)。因此可以用双层循环进行遍历,伪代码如下:

	// 左上角描点for (int i = 1; i <= n / 2 - 1; i ++) { // 1到n/2-1行for (int j = n / 2 - 1; j>= n / 2 - i; j --) { // 倒着来,从n/2-1到n/2-i列res[i][j] = '*';}}

经过这一步,我们所画出来的图形为:

      *       * *       * * *       
* * * * * * * *       *       *       
拼出第二部分-右上角

当我们画出左上角后,可以将 n / 2 n/2 n/2视作 y y y轴,进行关于y轴的对称实现映射效果。具体流程为:先遍历一遍左上角,遇到为*的就进行映射,只需要更改列的坐标即可,给出代码:

        for (int i = 1; i <= n / 2 - 1; i ++) { // 对称到右上角for (int j = 1; j <= n / 2 - 1; j ++) {if (res[i][j] == '*') {res[i][n / 2 + (n / 2 - j)] = res[i][j];}}}

此时生成的图形为:

      *       * * *     * * * * *   
* * * * * * * *       *       *       
接下来该怎么拼?

后面有多种拼法,可以先做左上角/右上角关于 x x x轴的对称,映射到左下角/右下角。这里我将上半部分当作一个整体,进行 x x x轴对称,一步到位!代码为:

	for (int i = 1; i <= n - 1; i ++) { // 对称到整个下方for (int j = 1; j <= n - 1; j ++) {if (res[i][j] == '*') {res[n / 2 + (n / 2 - i)][j] = res[i][j];}}}

图像为:

      *       * * *     * * * * *   
* * * * * * * * * * * *   * * *     *      

至此,菱形就被我们画出来。这道题有需要不同的画法,上面只是笔者自己的理解,关于其他更优雅更简洁的方法请大家开动脑筋去尽情尝试吧!!

代码(Java)

import java.util.*;public class Main {public static void main(String args[]) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int x = n / 2;char[][] res = new char[n][n];for (int i = 0; i < n; i ++) { // 画出十字架for (int j = 0; j < n; j ++) {if (i == n / 2 || j == n / 2) res[i][j] = '*';}}for (int i = 1; i <= n / 2 - 1; i ++) { // 左上角for (int j = n / 2 - 1; j>= n / 2 - i; j --) {res[i][j] = '*';}}for (int i = 1; i <= n / 2 - 1; i ++) { // 对称到右上角for (int j = 1; j <= n / 2 - 1; j ++) {if (res[i][j] == '*') {res[i][n / 2 + (n / 2 - j)] = res[i][j];}}}for (int i = 1; i <= n - 1; i ++) { // 对称到整个下方for (int j = 1; j <= n - 1; j ++) {if (res[i][j] == '*') {res[n / 2 + (n / 2 - i)][j] = res[i][j];}}}for (int i = 0; i < n; i ++) {for (int j = 0; j < n; j ++) {if (res[i][j] == '*') System.out.print('*');else System.out.print(' ');}System.out.println();}}
}

相关文章:

AcWing 727. 菱形——像拼图一样做题

题目描述] 分析&#xff1a; 利用程序根据输入的整数&#xff0c;画出由字符*构成的该整数阶的实心菱形。给出一个示例&#xff1a; n 7 n7 n7。 * * * * * * * * * * * * * * * * * * * * * * * * * 我们将采取拆解问题&#xff0c;通过四个部分的…...

深入理解生成型大型语言模型:自监督预训练、细调与对齐过程及其应用

分析概述 本文主要介绍了生成型大型语言模型&#xff08;LLM&#xff09;的预训练过程&#xff0c;特别是通过下一个令牌&#xff08;token&#xff09;预测的自监督学习方法&#xff0c;以及后续的细调&#xff08;finetuning&#xff09;和对齐&#xff08;alignment&#x…...

个人简历主页搭建系列-03:Hexo+Github Pages 介绍,框架配置

今天的更新内容主要是了解为什么选择这个网站搭建方案&#xff0c;以及一些前置软件的安装。 Why Hexo? 首先我们了解一下几种简单的网站框架搭建方案&#xff0c;看看对于搭建简历网站的需求哪个更合适。 在 BuiltWith&#xff08;网站技术分析工具&#xff09;上我们可以…...

【堆、位运算、数学】算法例题

目录 十九、堆 121. 数组中的第K个最大元素 ② 122. IPO ③ 123. 查找和最小的K对数字 ② 124. 数据流的中位数 ③ 二十、位运算 125. 二进制求和 ① 126. 颠倒二进制位 ① 127. 位1的个数 ① 128. 只出现一次的数字 ① 129. 只出现一次的数字 II ② 130. 数字范围…...

IDEA 多个git仓库项目放一个窗口

1、多个项目先通过新建module或者CtrlAltShiftS 添加module引入 2、重点是右下角有时候git 分支视图只有一个module的Repositories。这时候需要去设置把多个git仓库添加到同一个窗口才能方便提交代码。 3、如果Directory Mappings已经有相关项目配置&#xff0c;但是灰色的&…...

全球变暖(蓝桥杯,acwing每日一题)

题目描述&#xff1a; 你有一张某海域 NN 像素的照片&#xff0c;”.”表示海洋、”#”表示陆地&#xff0c;如下所示&#xff1a; ....... .##.... .##.... ....##. ..####. ...###. .......其中”上下左右”四个方向上连在一起的一片陆地组成一座岛屿&#xff0c;例如上图就…...

多数据源 - dynamic-datasource | 集成 Quartz 及 ShardingJDBC

文章目录 集成 Quartz引入 quartz-starter配置数据源参数创建任务配置 Quartz 实际使用的数据源方式一: 自定义 SchedulerFactoryBeanCustomizer方式二: 使用@QuartzDataSource来指明quartz数据源集成 ShardingJDBC项目引入 shardingsphere 依赖分别配置shardingjdbc和多数据…...

四连杆机构运动学仿真 | 【Matlab源码+理论公式文本】| 曲柄滑块 | 曲柄摇杆 | 机械连杆

【程序简介】&#x1f4bb;&#x1f50d; 本程序通过matlab实现了四连杆机构的运动学仿真编程&#xff0c;动态展现了四连杆机构的运动动画&#xff0c;同时给出了角位移、角速度和角加速度的时程曲线&#xff0c;除了程序本身&#xff0c;还提供了机构运动学公式推导文档&…...

Lightroom Classic 2024 for mac 中文激活:强大的图像后期处理软件

对于追求极致画面效果的摄影师来说&#xff0c;Lightroom Classic 2024无疑是Mac平台上的一款必备软件。它凭借其强大的功能和出色的性能&#xff0c;赢得了众多摄影师的青睐。 软件下载&#xff1a;Lightroom Classic 2024 for mac 中文激活版下载 在Lightroom Classic 2024中…...

程序员下班以后做什么副业合适?

我就是一个最普通的网络安全工程师&#xff0c;出道快10年了&#xff0c;不出意外地遭遇到瓶颈期&#xff0c;但是凭技术在各大平台挖漏洞副业&#xff0c;硬是妥妥扛过来了。 因为对于程序员来讲&#xff0c;这是个试错成本很低、事半功倍的选择。编程技能是一种强大生产力&a…...

HSE化工应急安全生产管理平台:衢州某巨大型化工企业的成功应用

在化工行业中&#xff0c;安全生产一直是至关重要的议题。为了提高生产安全性、降低成本并提升企业形象&#xff0c;衢州某巨大型化工企业引入了HSE化工应急安全生产管理平台&#xff0c;取得了显著的改善和获益。 该平台的核心功能包括风险管理和应急预案制定。通过对化工生产…...

塑料工厂5G智能制造数字孪生可视化平台,推进塑料行业数字化转型

塑料工厂5G智能制造数字孪生可视化平台&#xff0c;推进塑料行业数字化转型。塑料制造行业作为重要的工业领域&#xff0c;亟需借助这一平台实现产业升级与转型&#xff0c;以适应市场的变化和提高生产效率。传统的塑料制造过程往往存在生产效率低下、资源浪费、环境污染等问题…...

HTML万字学习总结

html文本标签特殊符号图片音频与视频超链接表单列表表格语义标签(布局) html文本标签 标签简介<html></html>根目录<head></head>规定文档相关的配置信息&#xff08;元数据<body></body>元素表示文档的内容<meta></meta>表示…...

Linux网络编程: 以太网帧Frame/ARP/RARP详解

一、TCP/IP五层模型 物理层&#xff08;Physical Layer&#xff09;&#xff1a;物理层是最底层&#xff0c;负责传输比特流&#xff08;bitstream&#xff09;以及物理介质的传输方式。它定义了如何在物理媒介上传输原始的比特流&#xff0c;例如通过电缆、光纤或无线传输等。…...

【SpringCloud微服务实战09】Elasticsearch 搜索引擎

一、Elasticsearch 安装 1、Docker安装ES #创建一个网络 docker network create es-net#拉取ES镜像(这里使用7.17.18版本) docker pull elasticsearch:7.17.18#新建一个目录存放es数据 mkdir es cd es#docker运行 单机启动es docker run -d \--name es \-e "ES_JAVA_O…...

Leetcode 31. 删除无效的括号

心路历程&#xff1a; 一开始看到有点懵&#xff0c;后来发现有点像按照一定规则穷举所有可能情况&#xff0c;想到了排列组合问题&#xff0c;再结合问题长度不固定&#xff0c;无法用已知个for循环表示&#xff0c;从而想到了回溯。这个题相当于需要在一定规则下枚举。 按照…...

首页效果炫酷的wordpress免费主题模板

视频背景免费WP主题 简洁大气的视频背景wordpress主题&#xff0c;找大视频背景的主题可以看看这个。 https://www.wpniu.com/themes/193.html 红色全屏大图WP主题 非常经典的一款免费wordpress主题&#xff0c;红色全屏大图满足多行业使用。 https://www.wpniu.com/themes…...

网络安全的几个关键领域

网络安全是一个复杂且多维度的领域&#xff0c;涵盖了多个关键领域&#xff0c;涉及到信息保护、网络防护、应用安全、用户教育以及物理安全等多个方面。这些关键领域相互交织&#xff0c;共同构成了网络安全这一宏大且细致入微的领域。 今天德迅云安全就分享下网络安全的几个…...

Vue 计算属性和监视属性

Vue 计算属性和监视属性 computed computed 计算属性 规则&#xff1a; 用已有的属性计算不存在的属性默认调用一次get()只有值不发生改变的时候才可以使用简写&#xff08;函数&#xff09;&#xff1b;值发生改变 使用对象式写法&#xff0c;才可以配置set()方法底层原理使…...

【Python】反编译PyInstaller打包的exe

查看exe基本信息 需要反编译的exe 查看exe文件的打包工具&#xff0c;查看exe信息的软件叫Detect It Easy(查壳工具) 由图我们可以看出当前选中的exe文件是由名叫PyInstaller的打包工具打包好的exe 反编译 exe反编译工具&#xff1a;pyinstxtractor.py 使用方法 python py…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障

关键领域软件测试的"安全密码"&#xff1a;Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力&#xff0c;从金融交易到交通管控&#xff0c;这些关乎国计民生的关键领域…...

DBLP数据库是什么?

DBLP&#xff08;Digital Bibliography & Library Project&#xff09;Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高&#xff0c;数据库文献更新速度很快&#xff0c;很好地反映了国际计算机科学学术研…...

软件工程 期末复习

瀑布模型&#xff1a;计划 螺旋模型&#xff1a;风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合&#xff1a;模块内部功能紧密 模块之间依赖程度小 高内聚&#xff1a;指的是一个模块内部的功能应该紧密相关。换句话说&#xff0c;一个模块应当只实现单一的功能…...

Linux 下 DMA 内存映射浅析

序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存&#xff0c;但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程&#xff0c;可以参考这篇文章&#xff0c;我觉得写的非常…...

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践&#xff0c;很多人以为AI已经强大到不需要程序员了&#xff0c;其实不是&#xff0c;AI更加需要程序员&#xff0c;普通人…...

DeepSeek越强,Kimi越慌?

被DeepSeek吊打的Kimi&#xff0c;还有多少人在用&#xff1f; 去年&#xff0c;月之暗面创始人杨植麟别提有多风光了。90后清华学霸&#xff0c;国产大模型六小虎之一&#xff0c;手握十几亿美金的融资。旗下的AI助手Kimi烧钱如流水&#xff0c;单月光是投流就花费2个亿。 疯…...