乙级的题目训练主要用来熟悉编程语言的语法和形成良好的编码习惯和编码规范。从小白开始逐步掌握用编程解决问题。
PAT (Basic Level) Practice 1027 打印沙漏
问题分析
题设给定了可用的符号数量, 要求输出能够打印出的最大的沙漏。
如果知道要输出几层, 问题会变得简单,就是一个循环加输出的操作。
所以我们需要先计算出要输出几层。
层数计算
- 方案一: 直接按照输出累加需要使用的符号数量, 找到小于等于可用符号量的最大使用值
- 方案二: 数学公式
以输入样例为例:
使用的符号数量为:
1 + 3 + 3 + 5 + 5
= (1 + 3 + 5) * 2 - 1
= (1 + 5) * 3 / 2 * 2 - 1
= (1 + 5) * 3 - 1
= 17
替换为层数为:
(1 + row * 2 - 1) * row - 1 = 2 * row * row - 1