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

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

输入格式:

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

输出格式:

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

输入样例:

19 *

输出样例:

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

题目分析

首先经过题目分析,可知特殊符号数跟行数有着某种特殊关系,除去中间的一颗星星*,可以发现上半部分的是个递增的等差数列:3,5,7,9,…,可得通项公式2n+1(其中n = 上半部分行数 = 下半部分行数)

那么求和即为Sn = n2+2n,这是上半部分的。那么上下两部分即可得到:

总**用量:2( n2+2n) = 2n2+4n

到这里我们就可以算出输入的数能生成几行了。

打印沙漏

正确代码

#include<iostream>
using namespace std;int n,len=1,sum=1;
char c; int main(){cin>>n>>c;  //19 *for(;sum<=n;len++){  sum+=2*(2*len+1);   }len--; //!!!因for循环的len++所以多加了1个len len--; //因为sum<=n 所以sum多了一次,所以len也多了一次
//  len/=2;sum=1+2*(len*(len+2));  //重新计算sum int l=len;  //2for(int i=1;i<=len;i++){for(int j=1;j<i;j++){cout<<' ';}for(int j=1;j<=2*l+1;j++){cout<<c;}l--; //知识点:l--在for的外面 cout<<endl;}//中间for(int i=1;i<=len;i++){cout<<' ';} cout<<c;cout<<endl;//下面l=len;  //知识点:倒序的用l  l--在for外面 for(int i=1;i<=len;i++){for(int j=1;j<l;j++){cout<<' ';}l--; for(int j=1;j<=2*i+1;j++){cout<<c;}cout<<endl;}cout<<n-sum;
}
#include <iostream>
using namespace std;int main() {int N; char c;cin >> N;cin >> c;//计算行数row,只计算一半的行数,不包括最中间的那个一个符号int row = 0;for (int i = 1; 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;
}

错误代码

#include<iostream>
using namespace std;
//19-1=18/2=9=2n-1   n=5   (N-1)/2=2n-1     ((N-1)/2+1)/2 ==n==5int main(){int N;char c;cin>>N>>c;int n=((N-1)/2+1)/2; //第一行有几个int len=n/2+1;  //上三角多少行for(int i=0;i<len;i++){  //行 for(int j=0;j<i;j++){cout<<' ';}for(int j=0;j<n-2*i;j++){cout<<c;}cout<<endl;} for(int i=0;i<len-1;i++){  //行少了一个 for(int j=0;j<(n-(2*(i+1)+1))/2;j++){ //空格多了一个 cout<<' ';}for(int j=0;j<2*(i+1)+1;j++){ //*少了两个 cout<<c;}cout<<endl;} int sum=1;for(int k=3;k<=n;k=k+2){sum+=k*2;}cout<<N-sum;
}

7-1 打印沙漏 (20分)相关推荐

  1. C语言程序练习-L1-002 打印沙漏 (20分)

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

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

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

  3. 7-138 打印沙漏 (20 分)

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

  4. 7-1 打印沙漏 (20 分)

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

  5. PTA练习题1027 打印沙漏 (20分)

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

  6. 打印沙漏 (20 分)

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

  7. 1027 打印沙漏 (20 分)

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

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

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

  9. 1027 打印沙漏 (20分)——27行代码AC(结构清晰)

    立志用更少的代码做更高效的表达 PAT乙级最优题解-->传送门 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 ********** ...

最新文章

  1. 微信小程序上传的视频显示封面 我是阿里云oss的实现
  2. webgl 游戏_如何选择 WebGL 框架和引擎?
  3. vue 项目中使用粘性布局不起作用_做vue项目中遇到的坑总结与学习
  4. 解决apache的the requested operation has failed
  5. Hibernate 入门 特性配置
  6. IDEA新特性真牛逼:提前知道代码怎么走!
  7. 保存Google、Bing翻译的语音
  8. 简单提高MIDI音量的方法
  9. 趣闲赚~~~~~~青龙脚本
  10. Element table各种合并单元格
  11. numpy第三章-索引器、多级索引
  12. Jmeter beanshell语法
  13. Java集合的接口和类层次结构图以及代码示例
  14. 如何实现U盘低格?这样操作快速搞定!
  15. 网页中的th/th是什么意思
  16. 计算机毕业设计源代码Python毕业论文题目基于Python实现的学生在线选课系统[包运行成功]
  17. python xlsxwriter行数_使用python库xlsxwriter库来输出各种xlsx文件的示例
  18. 天威诚信荣获「金融科技领域最具品牌影响力奖」
  19. 如何破解安腾校园网客户端(2)
  20. RandLA-Net 论文学习

热门文章

  1. [翻译] 使用 TensorFlow 进行分布式训练
  2. springboot毕设项目“果然是你”水果直销平台vkfo8(java+VUE+Mybatis+Maven+Mysql)
  3. 17joys用户管理 添加用户
  4. 浪潮超融合服务器虚拟机管理,浪潮联合VMware发布新一代超融合一体机
  5. 超融合一体机与一体机的区别
  6. Spring之Bean的自动装配
  7. 【Redis详细安装教程】
  8. Python编程从入门到实践 第十章:文件和异常 练习答案记录
  9. 283移动零之Leecode—数组篇(双指针)
  10. vue高德地图实现关键字搜索