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

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


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

一、L1-002 打印沙漏

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

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

解题思路
  1. 确定行数:首先需要根据输入的 N 计算出最大行数,使符号尽量用完。通过公式 2 * row * row - 1 计算每行符号数量,直到符号总数不超过 N
  2. 对称打印:沙漏的上半部分和下半部分是对称的。打印上半部分后,利用相同的逻辑打印下半部分。
  3. 剩余符号:如果构建沙漏后有剩余符号,输出剩余的符号数量。
代码实现
package cjcDemoimport std.console.*
import std.convert.*// 计算沙漏形状并输出
func printSandGlass(N: Int64, shape: String): Unit {var row = 1var totalUsed = 1// 寻找最大行数while (2 * row * row - 1 <= N) {totalUsed = 2 * row * row - 1row += 1}row -= 1// 打印上半部分for (i in 0..row) {let start = row - ifor (_ in 0..i) {print(' ')}for (_ in 0..2 * start - 1) {print(shape)}print('\n')}// 打印下半部分for (i in 1..row) {let space = row - ifor (_ 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.xdnf.cn/news/15457.html

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

相关文章

Vulkan 开发(十一):Vulkan 交换链

Vulkan 系列文章&#xff1a; 1. 开篇&#xff0c;Vulkan 概述 2. Vulkan 实例 3. Vulkan 物理设备 4. Vulkan 设备队列 5. Vulkan 逻辑设备 6. Vulkan 内存管理 7. Vulkan 缓存 8. Vulkan 图像 9. Vulkan 图像视图 10. Vulkan 窗口表面&#xff08;Surface&#xff…

【HarmonyOS】鸿蒙系统在租房项目中的项目实战(一)

从今天开始&#xff0c;博主将开设一门新的专栏用来讲解市面上比较热门的技术 “鸿蒙开发”&#xff0c;对于刚接触这项技术的小伙伴在学习鸿蒙开发之前&#xff0c;有必要先了解一下鸿蒙&#xff0c;从你的角度来讲&#xff0c;你认为什么是鸿蒙呢&#xff1f;它出现的意义又是…

百度搜索AI探索版多线程批量生成TXT原创文章软件-可生成3种类型文章

百度搜索AI探索版是百度推出的一款基于大语言模型文心一言的综合搜索产品‌。以下是关于百度搜索AI探索版的详细介绍&#xff1a; ‌产品发布‌&#xff1a;百度搜索AI探索版在百度世界大会上进行了灰度测试&#xff0c;并面向用户开放体验‌。 ‌核心功能‌&#xff1a;与传…

Linux软件包管理与Vim编辑器使用指南

目录 一、Linux软件包管理器yum 1.什么是软件包&#xff1f; 2.什么是软件包管理器&#xff1f; 3.查看软件包 4.安装软件 ​编辑 5.卸载软件 Linux开发工具&#xff1a; 二、Linux编辑器---vim 1.vim的基本概念 (1) 正常/普通模式&#xff08;Normal mode&#xff0…

Android Osmdroid + 天地图 (一)

Osmdroid 天地图 前言正文一、配置build.gradle二、配置AndroidManifest.xml三、获取天地图的API Key① 获取开发版SHA1② 获取发布版SHA1 四、请求权限五、显示地图六、源码 前言 Osmdroid是一款完全开源的地图基本操作SDK&#xff0c;我们可以通过这个SDK去加一些地图API&am…

2024国内AI工具十大推荐丨亲测好用‼️

&#x1f680;探索了市面上数百款AI工具后&#xff0c;我精心挑选了10款在不同场景下超级好用的神器&#xff0c;快来一起看看吧&#xff01;&#x1f31f; 1️⃣豆包 基于云雀模型开发&#xff0c;具备聊天机器人、写作助手、英语学习助手等功能&#xff0c;能够进行多轮对话…

Unity学习---IL2CPP打包时可能遇到的问题

写这篇主要是怕自己之后打包的时候出问题不知道怎么搞&#xff0c;所以记录一下。 问题一&#xff1a;类型裁剪 IL2CPP打包后会自动对Unity工程的dll进行裁剪&#xff0c;将代码中没有引用到的类型裁剪掉。特别是通过反射等方式调用一些类的时候&#xff0c;很容易出问题。 …

多模态大模型(2)--BLIP

大模型如火如荼&#xff0c;研究者们已经不再满足于基本文本的大语言模型&#xff08;LLM, Large Language Model&#xff09;&#xff0c;AI领域的热点正逐步向多模态转移&#xff0c;具备多模态能力的多模态大型语言模型&#xff08;MM&#xff08;Multi-Modal&#xff09;-L…

基于MATLAB身份证号码识别

课题介绍 本课题为基于连通域分割和模板匹配的二代居民身份证号码识别系统&#xff0c;带有一个GUI人机交互界面。可以识别数十张身份证图片。 首先从身份证图像上获取0&#xff5e;9和X共十一个号码字符的样本图像作为后续识别的字符库样本&#xff0c;其次将待测身份证图像…

Siggraph Asia 2024 | Adobe发布MagicClay:可通过文字引导去对3D模型中的特定部分进行雕刻

今天给大家介绍一篇来自Adobe研究人员在Siggraph Asia 2024上发表的最新工作MagicClay&#xff0c;它是一款结合网格和距离场(SDF)的混合式工具&#xff0c;可以通过文字引导去对3D模型中的特定部分进行雕刻。允许艺术家通过文字提示进行局部网格编辑&#xff0c;支持生成具纹理…

滑动窗口的使用

一、定义与基本原理 滑动窗口是一种流量控制技术&#xff0c;也用于管理和处理数据流。它通过定义一个固定大小或可根据特定条件动态调整的窗口&#xff0c;在数据流或数据序列上滑动&#xff0c;以便高效地处理其中的数据。这种技术能够限制同时处理的数据量&#xff0c;从而…

Python学习26天

集合 # 定义集合 num {1, 2, 3, 4, 5} print(f"num&#xff1a;{num}\nnum数据类型为&#xff1a;{type(num)}") # 求集合中元素个数 print(f"num中元素个数为&#xff1a;{len(num)}") # 增加集合中的元素 num.add(6) print(num) # {1,2,3,4,5,6} # 删除…

android开发

文章目录 android开发 类微信界面整体框架展示&#xff1a;主页Fragment_MainActivity2&#xff1a;1. 聊天界面2. 用户界面用户界面的跳转 3. 朋友圈界面4. 我的界面 android开发 类微信界面 整体效果展示&#xff1a; 整体框架展示&#xff1a; 4个主要的fragment页面&#…

【大数据学习 | flume】flume的概述与组件的介绍

1. flume概述 Flume是cloudera(CDH版本的hadoop) 开发的一个分布式、可靠、高可用的海量日志收集系统。它将各个服务器中的数据收集起来并送到指定的地方去&#xff0c;比如说送到HDFS、Hbase&#xff0c;简单来说flume就是收集日志的。 Flume两个版本区别&#xff1a; ​ 1&…

vmware安装Ubuntu桌面版系统

1安装环境 vmware版本&#xff1a;VMware Workstation 17 Ubuntu版本&#xff1a;ubuntu-24.04.1-desktop-amd64.iso 文档时间&#xff1a;2024年11月 每一个Ubuntu的版本安装显示可能不一样&#xff0c;但安装方法是类似的 2镜像下载 Ubuntu官网&#xff1a;[https://ubun…

STL--map、set的使用和模拟实现

1.set 1.1 set的概念 set 是一种基于 平衡二叉搜索树&#xff08;通常是红黑树&#xff09; 实现的容器&#xff0c;它提供了有序集合的功能。set 用于存储唯一的元素&#xff0c;并且元素是按照某种顺序排列的&#xff08;通常是升序&#xff09;。 set 确实是一个关联式容…

软件测试之什么是缺陷

软件测试之什么是缺陷 1. 缺陷定义2. 缺陷判定标准3. 缺陷产生原因3.1 缺陷产生的原因3.2 缺陷的生命周期 4. 缺陷核心内容5. 缺陷提交要素6. 缺陷类型 1. 缺陷定义 软件在使用过程中存在的任何问题都叫软件的缺陷, 简称Bug. 2. 缺陷判定标准 3. 缺陷产生原因 3.1 缺陷产生的…

二叉树的遍历(手动)

树的遍历分四种&#xff1a; 层序遍历 前序遍历 中序遍历 后序遍历 层序遍历&#xff1a; 很好理解&#xff0c;就是bfs嘛&#xff08;二不二叉都行&#xff09; 前序遍历&#xff1a; 又叫先跟遍历&#xff0c;遍历顺序是根->左->右&#xff08;子树里也是&#…

Unix进程

文章目录 命令行参数进程终止正常结束异常终止exit和_exitatexit 环境变量环境变量性质环境表shell中操作环境变量查看环境变量设置环境变量 环境变量接口获取环境变量设置环境变量 环境变量的继承性 进程资源shell命令查看进程的资源限制 进程关系进程标识进程组会话控制终端控…

供应链管理、一件代发系统功能及源码分享 PHP+Mysql

随着电商行业的不断发展&#xff0c;传统的库存管理模式已经逐渐无法满足市场需求。越来越多的企业选择“一件代发”模式&#xff0c;即商家不需要自己储备商品库存&#xff0c;而是将订单直接转给供应商&#xff0c;由供应商直接进行发货。这种方式极大地降低了企业的运营成本…