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

2024-11-14 20:51:26
9次阅读
0个评论
最后修改时间:2024-11-14 23:06:58

本篇将深入讲解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 來源:坚果派 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


收藏00

登录 后评论。没有帐号? 注册 一个。