本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印

************
*****

所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。

给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

输入格式:
输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。

输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
输入样例:

19 *

输出样例:

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

思路

* 已知条件是*号的总个数n。
* 我们要打印出沙漏,必须要知道沙漏的行数。
* 假定最中间即1个*号的那行为第1行,最上层那行的行数为a。
* 即暂时只考虑沙漏的上半部分。
*********
-----------------------------------先考虑上半部分***
*****

可以得到:

* 每行的*个数为:2a-1
* 每行个数排列为: 1  3  5  7  9  ...  2a-1
* 总和就是a个奇数排列之和:a*a* 计算过程(学过高斯的故事吧): (2a-1+1) * (a/2)

此时得到沙漏上半部分的*个数是 a*a。下半部分就比上半部分少一个1,也就是 a*a - 1。*号总个数是 2*a*a-1
得到满足条件的计算公式:2*a*a-1<=n。先求出最大a,再打印即可。

关注点:

  • 打印的每行*结尾不是空格。我这个点卡了很久
************这里不是空格***这里也不是空格
  • 打印图形之后,需要输出剩余*数量

python3代码实现如图:

def solution(n: int, char: str = "*"):"""模拟:从最上层到1个符号这行,一共lines行2lines*lines - 1 <= nn: 字符数目char: 字符"""# 从1的那行到最上方一共lines行lines = 0while 2 * lines * lines - 1 <= n:lines += 1lines -= 1# 打印图形# 最上方一行*号数量first_line = int(2 * lines - 1)# 打印沙漏for line in range(1, 2 * lines):   if line <= lines:# 上半部分# *数量count = 2 * (lines - (line - 1)) - 1*每行*前实际空格space_str = ' ' * ((first_line - count) // 2)print(f"{space_str}{char * count}")continue# 下半部分 此时line值比lines大了count = 2 * (line - lines + 1) - 1space_str = ' ' * ((first_line - count) // 2)print(f"{space_str}{char * count}")print(int(n - 2 * lines * lines + 1))

PTA自测-1 打印沙漏 python实现相关推荐

  1. PAT 00-自测1. 打印沙漏(20)

    今天第一次在线(浙大PAT)刷算法题,折腾好几个小时后,终于成功了:) c用的少,写起来好费力,将多个*拼接,就百度好久.下面再用其他语言试试. #include <stdio.h> #i ...

  2. PTA编程总结1—打印沙漏

    题目:7-1 打印沙漏 (20 分) 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 ************ ***** 所谓" ...

  3. 用python输出沙漏_1027 打印沙漏 Python实现

    1027 打印沙漏(20)(20 分) 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 ***** *** * *** ***** 所谓& ...

  4. 数据结构练习 00-自测1. 打印沙漏(20)

    本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 ************ ***** 所谓"沙漏形状",是指每行输出奇 ...

  5. c语言pta判断字符或数字的昵称,c/c++开发分享『ACM C++』PTA浙大 | 基础题 – 打印沙漏...

    < 一首好曲推荐:同时我也设置成了我的博客背景音乐 <开启新征程> &mdas 收藏链接: ----------------题目-------------------- 本题 ...

  6. L1-002打印沙漏C语言,沙漏

    再次看了下,主要看了成本体积的构建. 目录 摘要 1.介绍 2.相关工作(自己去看) 3. Pyramid Stereo Matching Network 3.1 网络结构 3.2 Spatial P ...

  7. PTA L1_002 打印沙漏(C语言)

    PTA L1_002 打印沙漏(C语言) 用C语言打印一个沙漏 一.题目概要 二.题目分析 三.解题思路 (一).给定的字符可以打印几行 (二).剩余的字符数 (三).如何输出沙漏 四.代码一览 五. ...

  8. 用python打印沙漏_PAT团体程序设计天梯赛-练习集答案

    这个是本萌新准备找工作时自己在网上刷的题目和自己写的答案,类似的答案在网上很多,我也的答案也算不上好,仅仅是留下来做个备份(所有答案由C++或Python编写)编写环境为Win7 64bit, VS2 ...

  9. PTA L1-002 打印沙漏(详解)

    前言:本期是关于pta题目打印沙漏的具体解法,今天你c了吗?  题目: 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 ********* ...

最新文章

  1. 医疗卫生信息化 医学信息 医疗信息化 医院管理 资料下载
  2. 服务器上装centos系统花屏,CentOS系统如何解决鼠标花屏的问题
  3. 从TCP协议的原理来谈谈rst复位攻击
  4. href=#与javascript:void(0)的区别
  5. 欢乐纪中A组赛【2019.8.10】
  6. 架构大型企业Java项目–我的虚拟JUG会话
  7. 电商移动促销页面设计素材PSD分层模板,轻松出稿稿
  8. 聚焦BCS|新华财经:奇安信董事长齐向东:网络安全市场规模10年将增长10倍
  9. 2018-12-26 课堂笔记 for循环
  10. java多站点项目_java-在多模块项目构建期间模块之间的Maven...
  11. bzoj1042硬币购物
  12. 未将对象引用设置到对象实例(转)
  13. 多线程中使用CheckForIllegalCrossThreadCalls = false访问窗口
  14. Latex:插入数学公式
  15. java窗体图标的设置
  16. Crontab cron.deny cron.allow
  17. adb启动程序命令:adb shell am start
  18. python大写金额算法
  19. Banner 怎么实现轮播不同尺寸的图片
  20. 斯坦福编程方法学作业讲解3---Karel机器人三大定律(上)

热门文章

  1. SparkSql 控制输出文件数量且大小均匀(distribute by rand())
  2. Linux解压缩时报错: Error is not recoverable: exiting now
  3. css 变量_如何将CSS变量用于动画
  4. Python学习第八节
  5. /tmp/ccAceHhY.o: In function `main': main.c:(.text+0xc7): undefined reference to `dlopen' main.c:
  6. 使用 Taro 快速开发京东小程序
  7. 练习:输入一个数,判断他是奇数还是偶数
  8. Teams下载安装教程
  9. Matlab:License checkout failed. License Manager Error-95解决办法与Matlab加速启动
  10. 【C#】消除锯齿 - 指定抗锯齿的呈现。