「Mac玩转仓颉内测版11」PTA刷题篇2 - L1-002 打印沙漏

news2024/11/15 14:29:19

本篇将深入讲解PTA平台上的题目 L1-002 打印沙漏,通过符号打印与循环控制的结合,构建一个沙漏形状,进一步强化对循环、条件判断及输出控制的掌握。


关键词
  • PTA刷题
  • 打印沙漏
  • 循环控制
  • 输出格式
  • 算法练习

一、L1-002 打印沙漏

题目描述:输入一个正整数 N,用字符 * 打印出一个沙漏形状,要求符号数量尽可能使用完。

  • 输入格式:正整数 N(1 ≤ N ≤ 1000)。
  • 输出格式:打印出沙漏形状,符号间隔使用空格,符号数多时尽量均匀分布。

解题思路
  1. 确定行数:首先需要根据输入的 N 计算出最大行数,使符号尽量用完。通过公式 2 * row * row - 1 计算每行符号数量,直到符号总数不超过 N
  2. 对称打印:沙漏的上半部分和下半部分是对称的。打印上半部分后,利用相同的逻辑打印下半部分。
  3. 剩余符号:如果构建沙漏后有剩余符号,输出剩余的符号数量。
代码实现
package cjcDemo

import std.console.*
import std.convert.*

// 计算沙漏形状并输出
func printSandGlass(N: Int64, shape: String): Unit {
    var row = 1
    var totalUsed = 1
    
    // 寻找最大行数
    while (2 * row * row - 1 <= N) {
        totalUsed = 2 * row * row - 1
        row += 1
    }
    row -= 1

    // 打印上半部分
    for (i in 0..row) {
        let start = row - i
        for (_ in 0..i) {
            print(' ')
        }

        for (_ in 0..2 * start - 1) {
            print(shape)
        }
        print('\n')
    }

    // 打印下半部分
    for (i in 1..row) {
        let space = row - i
        for (_ in 1..space) {
            print(' ')
        }

        for (_ in 0..2 * i + 1) {
            print(shape)
        }
        print('\n')
    }

    println("${N - totalUsed}")
}
 
main(): Int64 {
    var c = Console.stdIn.readln()
    var r = c.getOrThrow()
    var arr:Array<String> =r.split(' ')
    let N = Int64.parse(arr[0])
    let shape = arr[1]
 
    // 执行测试
    printSandGlass(N, shape)

    return 0
}

代码详解
  1. 最大行数计算:通过 2 * row * row - 1 的公式,计算每行符号数量,直到符号总数不超过 N
  2. 打印上半部分:从最大行数开始,每行符号逐渐减少,同时根据行号增加空格,实现沙漏上半部分。
  3. 打印下半部分:下半部分与上半部分对称,通过同样的逻辑从第二行开始逐步打印。
  4. 剩余符号:如果沙漏无法用完所有符号,输出剩余符号数。

示例执行

输入:

19 *

输出:

*****
 ***
  *
 ***
*****
2

这道题目考察了循环控制及输出格式的精确性,非常适合锻炼基础算法的设计能力。


小结

本篇通过实现 L1-002 打印沙漏 题目,进一步强化了对循环结构和格式控制的理解与应用。复杂度比上一道题有所提升,练习了打印格式的对称控制。


下篇预告

下一篇将继续讲解PTA题目,逐步解决 L1-003 个位数统计,敬请期待 「Mac玩转仓颉内测版12」PTA刷题篇3 - L1-003 个位数统计


上一篇:「Mac玩转仓颉内测版10」PTA刷题篇1 - L1-001 Hello World
下一篇:「Mac玩转仓颉内测版12」PTA刷题篇3 - L1-003 个位数统计

作者:SoraLuna
链接:https://www.nutpi.net/thread?topicId=156
來源:坚果派
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


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

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

相关文章

人体存在感应器设置时间开启感应人存在开灯,失效

环境&#xff1a; 领普人体存在感应器 问题描述&#xff1a; 人体存在感应器设置时间开启感应人存在开灯,失效&#xff0c;设置下午5点&#xff0c;如果有人在5点前一直在这个区域&#xff0c;这个时候到了5点&#xff0c;就触发不了感应自动打开灯光。 解决方案&#xff1a…

常用命令之LinuxOracleHivePython

1. 用户改密 passwd app_adm chage -l app_adm passwd -x 90 app_adm -> 执行操作后&#xff0c;app_adm用户的密码时间改为90天有效期--查看该euser用户过期信息使用chage命令 --chage的参数包括 ---m 密码可更改的最小天数。为零时代表任何时候都可以更改密码。 ---M 密码…

基于yolov8、yolov5的车型检测识别系统(含UI界面、训练好的模型、Python代码、数据集)

摘要&#xff1a;车型识别在交通管理、智能监控和车辆管理中起着至关重要的作用&#xff0c;不仅能帮助相关部门快速识别车辆类型&#xff0c;还为自动化交通监控提供了可靠的数据支撑。本文介绍了一款基于YOLOv8、YOLOv5等深度学习框架的车型识别模型&#xff0c;该模型使用了…

解决因为TortoiseSVN未安装cmmand line client tools组件,导致idea无法使用svn更新、提交代码

一.错误信息 1.更新代码时&#xff1a;SVN: 更新错误 找不到要更新的版本管理目录。 2.提交代码&#xff1a;检测不到任何更新&#xff08;实际上有代码修改&#xff09;。 3.Cannot run program "svn"。 二.原因分析 在电脑上新安装的的客户端TortoiseSVN、ide…

高效稳定!新加坡服务器托管方案助力企业全球化布局

在全球化的商业环境中&#xff0c;企业对于高效、稳定的服务器托管方案的需求日益迫切。作为亚洲的服务器托管中心&#xff0c;新加坡凭借其独特的地理位置、稳定的政治环境、先进的科技设施以及开放的市场政策&#xff0c;为企业提供了理想的服务器托管解决方案&#xff0c;助…

NVR管理平台EasyNVR多品牌NVR管理工具/设备:为什么IPC白天图像正常,夜视漆黑?

在安防监控系统中&#xff0c;IPC&#xff08;网络摄像机&#xff09;扮演着至关重要的角色。然而&#xff0c;有时用户可能会遇到这样的问题&#xff1a;IPC在白天时图像清晰正常&#xff0c;但到了夜晚却变得漆黑一片&#xff0c;无法看清监控画面。 为什么IPC白天图像正常&a…

安卓aab包的安装教程,附带adb环境的配置

一、ADB环境配置 安装aab包的前提是需要有adb环境&#xff0c;下面先介绍adb环境的配置 ADB通常位于/platform-tools/。 在Windows上&#xff0c;你可以通过以下步骤添加到环境变量&#xff1a; 右键点击“我的电脑”或“此电脑”&#xff0c;选择“属性”。 点击“高级系…

研究生如何远控实验室电脑?远程办公功能使用教程

如果你是研究生&#xff0c;是不是会遇到需要远程控制实验室电脑进行查看文献、调代码和拉数据的时候&#xff1f;有时候就是这么棘手&#xff0c;不过你可以借助一些工具来帮助你随时随地远控实验室电脑。这样就不用担心导师催促&#xff0c;无法及时完成科研了。常见的工具比…

计算机视觉和机器人技术中的下一个标记预测与视频扩散相结合

一种新方法可以训练神经网络对损坏的数据进行分类&#xff0c;同时预测下一步操作。 它可以为机器人制定灵活的计划&#xff0c;生成高质量的视频&#xff0c;并帮助人工智能代理导航数字环境。 Diffusion Forcing 方法可以对嘈杂的数据进行分类&#xff0c;并可靠地预测任务的…

云计算研究实训室建设方案

一、引言 随着云计算技术的迅速发展和广泛应用&#xff0c;职业院校面临着培养云计算领域专业人才的迫切需求。本方案旨在构建一个先进的云计算研究实训室&#xff0c;为学生提供一个集理论学习、实践操作、技术研发与创新于一体的综合性学习平台&#xff0c;以促进云计算技术…

React Native 全栈开发实战班 - 核心组件与导航

在 React Native 中&#xff0c;组件是构建用户界面的基本单元。React Native 提供了丰富的内置组件&#xff0c;涵盖了从基础布局到复杂交互的各种需求。本章节将详细介绍常用的内置组件&#xff0c;并重点讲解列表与滚动视图的使用。 1. 常用内置组件详解 React Native 提供…

【2025最新计算机毕业设计】基于SpringBoot+Vue电脑在线装机指南教程网站【源码+文档】

作者简介&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容&#xff1a;&#x1f31f;Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…

C语言——段管理

一、复习一下 1.指针的概念&#xff1f; 存储地址的基本数据类型 2.什么是数据类型&#xff1f; 在内存空间上框出一定空间的模子&#xff0c;比如int在内存空间上框出4个字节&#xff0c;int就是基本的数据类型 3.基本数据类型&#xff0c;多个数据类型&#xff0c;多个同…

SpringCloud 微服务消息队列灰度方案 (RocketMQ 4.x)

目录 背景遇到的问题 RocketMQ 基础基础消息模型扩展后的消息模型部署模型相关概念点 方案对比影子Topic的方案Tag的方案UserProperty的方案影子Group的方案灰度分区的方案方案对比 灰度分区方案设计适配只有部分灰度的情况所做的功能扩展消费者&#xff08;无灰度&#xff09;…

YOLOv8改进,YOLOv8结合DynamicConv(动态卷积),CVPR2024,二次创新C2f结构

摘要 大规模视觉预训练显著提高了大规模视觉模型的性能。现有的低 FLOPs 模型无法从大规模预训练中受益。在本文中,作者提出了一种新的设计原则,称为 ParameterNet,旨在通过最小化FLOPs的增加来增加大规模视觉预训练模型中的参数数量。利用 DynamicConv 动态卷积将额外的参…

【C++】在windows下配置一个小巧实用的C/C++调试环境

目录 1.准备环境 2.cgdb 3. gdb-dashboard 4.常用命令 4.1 cgdb命令 4.2 gdb常用命令 虽然在大部分常用的C/C编辑器中&#xff0c;调试功能已经很方便且完善&#xff0c;但是&#xff0c;如果你还需要一个小巧一点&#xff0c;调试信息还完善的调试环境的&#xff0c;可以…

Dolby TrueHD和Dolby Digital Plus (E-AC-3)编码介绍

文章目录 1. Dolby TrueHD特点总结 2. Dolby Digital Plus (E-AC-3)特点总结 Dolby TrueHD 与 Dolby Digital Plus (E-AC-3) 的对比 Dolby TrueHD和Dolby Digital Plus (E-AC-3) 是两种高级的杜比音频编码格式&#xff0c;常用于蓝光影碟、流媒体、影院等高品质音频传输场景。它…

k8s上部署redis高可用集群

介绍&#xff1a; Redis Cluster通过分片&#xff08;sharding&#xff09;来实现数据的分布式存储&#xff0c;每个master节点都负责一部分数据槽&#xff08;slot&#xff09;。 当一个master节点出现故障时&#xff0c;Redis Cluster能够自动将故障节点的数据槽转移到其他健…

计算机网络——路由选择算法

路由算法 路由的计算都是以子网为单位计算的——找到从原子网到目标子网的路径 链路状态算法

4.3 Java JNI 机制

1 绪论 JNI 是一个原生编程接口。它允许在 Java 虚拟机&#xff08;JVM&#xff09;内运行的 Java 代码与用其它编程语言&#xff08;如 C、C 和汇编&#xff09;编写的应用程序和库进行互操作。 JNI 最重要的好处是它对底层 JVM 的实现没有限制。因此&#xff0c;JVM 供应商可…