题目

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

所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入格式:
输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。
输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
输入样例:

19 *

输出样例:

分析

  • 从中间看,沙漏本质上是一个首项为1,公比为2的等差数列。
  • 通项公式an=a1+(n-1)d,前n项和Sn=a1+n(n-1)*d/2。代入首项和公比,an=2n-1,Sn=n2.
  • 一个沙漏的总字符数=2Sn-1=2n2-1,再由输入的字符数可计算出剩余字符个数。

AC代码

#include<iostream>
#include<cmath>
using namespace std;
int main()
{int i,j,N;char c;cin>>N>>c;double a=(double)(N+1)/2;int num=floor(sqrt(a));//上半部分for(i=num;i>=1;i--){for(j=0;j<num-i;j++)cout<<" ";for(j=0;j<2*i-1;j++)cout<<c;// for(j=0;j<num-i;j++)//    cout<<" ";cout<<endl;}//下半部分for(i=2;i<=num;i++){for(j=0;j<num-i;j++)cout<<" ";for(j=0;j<2*i-1;j++)cout<<c;// for(j=0;j<num-i;j++)//    cout<<" ";cout<<endl;}cout<<N-(2*num*num-1);
}

刚开始每行字符后面加了空格,后面提示"格式不对"。然后,只要求符号中心对齐,并没有要求后面的空格。也就是说,做题的时候,要紧跟题意,不要过于理解。

如果这篇文章对你有帮助,动动可爱的小手点个赞呗!
有任何问题,欢迎评论区交流。

更多题解
pat 乙级 题解汇总(持续更新)(C++)

pat 乙级 1027 打印沙漏(C++)相关推荐

  1. PAT乙级 1027 打印沙漏

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

  2. PAT乙级(1027 打印沙漏)

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

  3. PAT 乙级 1027. 打印沙漏(20) Java版

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

  4. PAT——乙级1036:跟奥巴马一起编程 乙级1027:打印沙漏 (有坑)

    乙级1036 1036 跟奥巴马一起编程 (15 point(s)) 美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统.2014 年底,为庆祝&qu ...

  5. C++学习之路 | PTA乙级—— 1027 打印沙漏 (20 分)(精简)

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

  6. PTA乙级 1027 打印沙漏——20分

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

  7. PAT Basic Level 1027 打印沙漏 解题思路及AC代码

    PAT 乙级 1027 打印沙漏 v1.0 1. 题目简述及在线测试位置 2. 基本思路 3. 完整AC代码 1. 题目简述及在线测试位置 1.1 给定N个字符,要求使用尽可能多的字符打印出一个沙漏. ...

  8. PAT (Basic Level) Practice (中文)1027 打印沙漏 (20 分)(C++)

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

  9. 1027. 打印沙漏(20)

    1027. 打印沙漏(20) C++AC代码(更新于2017年4月9日) 解题思路,注意到行数与第一行和最后一行字符数都是相等的,根据等差数列找关系 #include <iostream> ...

最新文章

  1. java通过异常处理错误_java 通过异常处理错误
  2. 一个亿万富翁和一个陌生人的换钱计划
  3. P6810 「MCOI-02」Convex Hull 凸包
  4. python编写代码_用 Python 编写干净、可测试、高质量的代码
  5. java建议:优先使用基本类型
  6. nginx的反向代理和负载均衡的区别
  7. 金属热处理行业调研报告 - 市场现状分析与发展前景预测
  8. 推荐两个有意思的自定义View小项目
  9. 拓端tecdat|SAS中用单因素ANOVA研究不同疗法对焦虑症的有效性
  10. [Docker] 03 AUFS
  11. GO程序设计语言学习笔记
  12. win7 配置JDK环境变量
  13. git提示Can‘t update: no tracked branch
  14. BEC higher经验1
  15. android仿小米日历,可周月选择
  16. 机器学习笔记(一) KNN K-最近邻
  17. honeywell霍尼韦尔控制器维修楼宇控制器维修
  18. 李开复、洪小文、黄学东关系
  19. 2019全国数学建模比赛总结
  20. 区块链如何改变我们的支付方式

热门文章

  1. 将MongoDB集成到您的Spring项目
  2. 如何使用Java 8函数式编程生成字母序列
  3. 配置java ee_Java EE中的配置管理
  4. JBoss Forge NetBeans集成–入门
  5. Spring集成–强大的拆分器聚合器
  6. 使用dbUnit,JSON,HSQLDB和JUnit规则进行数据库单元测试
  7. java oracle 字符_Oracle转义字符
  8. zsh 主题的下载和安装
  9. 用于zsh的插件incr(目录提示和补全)
  10. 正则表达式的捕获性分组/反向引用