「Mac玩转仓颉内测版11」PTA刷题篇2 - L1-002 打印沙漏
2024-11-14 20:51:26
16次阅读
0个评论
最后修改时间:2024-11-14 23:06:58
本篇将深入讲解PTA平台上的题目 L1-002 打印沙漏,通过符号打印与循环控制的结合,构建一个沙漏形状,进一步强化对循环、条件判断及输出控制的掌握。
关键词
- PTA刷题
- 打印沙漏
- 循环控制
- 输出格式
- 算法练习
一、L1-002 打印沙漏
题目描述:输入一个正整数 N,用字符 * 打印出一个沙漏形状,要求符号数量尽可能使用完。
- 输入格式:正整数 N(1 ≤ N ≤ 1000)。
- 输出格式:打印出沙漏形状,符号间隔使用空格,符号数多时尽量均匀分布。
解题思路
- 确定行数:首先需要根据输入的 N 计算出最大行数,使符号尽量用完。通过公式 2 * row * row - 1 计算每行符号数量,直到符号总数不超过 N。
- 对称打印:沙漏的上半部分和下半部分是对称的。打印上半部分后,利用相同的逻辑打印下半部分。
- 剩余符号:如果构建沙漏后有剩余符号,输出剩余的符号数量。
代码实现
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
}
代码详解
- 最大行数计算:通过 2 * row * row - 1 的公式,计算每行符号数量,直到符号总数不超过 N。
- 打印上半部分:从最大行数开始,每行符号逐渐减少,同时根据行号增加空格,实现沙漏上半部分。
- 打印下半部分:下半部分与上半部分对称,通过同样的逻辑从第二行开始逐步打印。
- 剩余符号:如果沙漏无法用完所有符号,输出剩余符号数。
示例执行
输入:
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 來源:坚果派 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
00
- 0回答
- 1粉丝
- 0关注
相关话题
- 「Mac玩转仓颉内测版20」PTA刷题篇11 - L1-011 A-B
- 「Mac玩转仓颉内测版10」PTA刷题篇1 - L1-001 Hello World
- 「Mac玩转仓颉内测版15」PTA刷题篇6 - L1-006 连续因子
- 「Mac玩转仓颉内测版16」PTA刷题篇7 - L1-007 念数字
- 「Mac玩转仓颉内测版14」PTA刷题篇5 - L1-005 考试座位号
- 「Mac玩转仓颉内测版18」PTA刷题篇9 - L1-009 N个数求和
- 「Mac玩转仓颉内测版19」PTA刷题篇10 - L1-010 比较大小
- 「Mac玩转仓颉内测版12」PTA刷题篇3 - L1-003 个位数统计
- 「Mac玩转仓颉内测版13」PTA刷题篇4 - L1-004 计算摄氏温度
- 「Mac玩转仓颉内测版17」PTA刷题篇8 - L1-008 求整数段和
- 「Mac玩转仓颉内测版1」入门篇1 - Cangjie环境的搭建
- 「Mac玩转仓颉内测版22」基础篇2 - 基础数据类型简述
- 「Mac玩转仓颉内测版21」基础篇1 - 仓颉程序的基本组成
- 「Mac玩转仓颉内测版2」入门篇2 - 编写第一个Cangjie程序
- 「Mac玩转仓颉内测版9」入门篇9 - 综合案例篇