本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
*****
***
*
***
*****
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大
顺序递增;首尾符号数相等。给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

输入格式

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

输出格式

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

输入样例:

19 *

输出样例:

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

分析:每个沙漏都是从最中间一行行向上下分别扩展一行,每次扩展行都要比之前一层多2个符号,最中间一行只有 1 个符号,假设扩展的层数为 i,则扩展出去的上边需要的所有符号个数为3 + 5 + 7 + … + (2i+1) = (3 + 2i + 1) * i / 2 = i * (i + 2),扩展出去的下边与上边同样多所以乘以2,加上最重要那一行1个符号,所以 总共需要2 * i * (i + 2) + 1个符号,所以i从0到N,找满足(2 * i * (i + 2) + 1) > N的最小的 i,因为符号不能超过N,所以只能扩展出去 i-1 行,用变量row表示从最中间一行需要扩展出去的行数,row = i – 1,接下来开始输出,上面的每一行,对于扩展出去的第 i 层需要输出row – i个空格,接着输出i * 2 + 1个符号c和换行符;对于最中间一行,需要输出row – 1个空格、符号c和换行符;对于下面的每一行,对于扩展出去的第i层,需要输出row-i个空格,接着输出i * 2 + 1个符号c和换行符,因为用掉的符号数为2 * row * (row + 2) + 1,所以最后输出剩下没用掉的符号数为N – (2 * row * (row + 2) + 1)~

#include <iostream>
using namespace std;
int main() {int N, row = 0;char c;cin >> N >> c;for (int i = 0; i < N; i++) {if ((2 * i * (i + 2) + 1) > N) {row = i - 1;break;}}for (int i = row; i >= 1; i--) {for (int k = row - i; k >= 1; k--) cout << " ";for (int j = i * 2 + 1; j >= 1; j--) cout << c;cout << endl;}for (int i = 0; i < row; i++) cout << " ";cout << c << endl;for (int i = 1; i <= row; i++) {for (int k = row - i; k >= 1; k--) cout << " ";for (int j = i * 2 + 1; j >= 1; j--) cout << c;cout << endl;}cout << (N - (2 * row * (row + 2) + 1));return 0;
}

1027. 打印沙漏(20)-PAT乙级真题相关推荐

  1. PAT 1074. 宇宙无敌加法器(20)-PAT乙级真题

    地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的.而在PAT星人开挂的世界里,每个数字的每一位都是不同进制的,这种神奇的数字称为"PAT数".每个PAT星人都必须熟记各 ...

  2. 1057. 数零壹(20)-PAT乙级真题

    1057. 数零壹(20) 给定一串长度不超过10^5的字符串,本题要求你将其中所有英文字母的序号(字母a-z对应序号1-26,不分大小写)相加,得到整数N,然后再分析一下N的二进制表示中有多少0.多 ...

  3. PAT 1072. 开学寄语(20)-PAT乙级真题

    1072. 开学寄语(20) 下图是上海某校的新学期开学寄语:天将降大任于斯人也,必先删其微博,卸其QQ,封其电脑,夺其手机,收其ipad,断其wifi,使其百无聊赖,然后,净面.理发.整衣,然后思过 ...

  4. 1064. 朋友数(20)-PAT乙级真题

    1064. 朋友数(20) 如果两个整数各位数字的和是一样的,则被称为是"朋友数",而那个公共的和就是它们的"朋友证号".例如123和51就是朋友数,因为1+2 ...

  5. 1063. 计算谱半径(20)-PAT乙级真题

    1063. 计算谱半径(20) 在数学中,矩阵的"谱半径"是指其特征值的模集合的上确界.换言之,对于给定的n个复数空间的特征值{a1+b1i, ..., an+bni},它们的模为 ...

  6. 1062. 最简分数(20)-PAT乙级真题

    1062. 最简分数(20) 一个分数一般写成两个整数相除的形式:N/M,其中M不为0.最简分数是指分子和分母没有公约数的分数表示形式. 现给定两个不相等的正分数 N1/M1 和 N2/M2,要求你按 ...

  7. 1059. C语言竞赛(20)-PAT乙级真题

    C语言竞赛是浙江大学计算机学院主持的一个欢乐的竞赛.既然竞赛主旨是为了好玩,颁奖规则也就制定得很滑稽: 0. 冠军将赢得一份"神秘大奖"(比如很巨大的一本学生研究论文集--). 1 ...

  8. 1007. 素数对猜想 (20)-PAT乙级真题

    让我们定义 dn 为:dn = pn+1 – pn,其中 pi 是第i个素数.显然有 d1=1 且对于n>1有 dn 是偶数."素数对猜想"认为"存在无穷多对相邻且 ...

  9. 1012. 数字分类 (20)-PAT乙级真题

    给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字: A1 = 能被5整除的数字中所有偶数的和: A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4-: A3 ...

最新文章

  1. 使用gdb调试多进程和多线程
  2. 比亚迪汉鸿蒙系统测评_比亚迪汉性能强悍,麋鹿测试成绩超80km/h
  3. 敏捷制造:并不是你想像的矛盾体
  4. [转]新东方老师上课讲的笑话(太有才了)
  5. 服务追踪系统_一键托管,阿里云全链路追踪服务正式商用:成本仅自建1/5或更少...
  6. Spring Boot Security 整合 OAuth2 设计安全API接口服务
  7. JavaScript数据结构-列表
  8. golang GUI编程之walk初建
  9. 观《怎样成为一个高手》后感
  10. 基于JAVA_JSP电子书下载系统
  11. windows下python3安装pip方法详解
  12. APP服务器被恶意攻击怎么办?
  13. WORD 分栏后 页码混乱
  14. 小程序商家如何开通直播带货功能
  15. 小程序中实现关注公众号
  16. LoRa PHY CSS解调
  17. donet datatable的代码输入
  18. VL (Vision and Language) 任务简介及数据集
  19. 通达信l2数据接口好用吗?
  20. least(exp1,exp2,exp3,……,expn)

热门文章

  1. Android UI开发第三十九篇——Tab界面实现汇总及比较
  2. Android开发——联系人中几种常见的mimetype、几张常见表的Uri
  3. Android 获取手机号及运营商信息
  4. spring-security3 配置和使用
  5. spring面向接口编程
  6. CSAPP-C1-计算机系统漫游
  7. JAVA Metrics 度量工具使用介绍
  8. expdp 详解及实例
  9. 如何从SQL Server查找指定的临时表
  10. C#线程系列讲座(4):同步与死锁