**

打印沙漏

**

(哈哈哈哈今天是假期的第一天学习 刚刚问了司机 没想到他天天打代码 !偶像啊!)

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

输入格式:
输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。
输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
这是PTA上的截图

(别的小朋友一看到题目都想到了等差数列 就我一个傻傻的)

我思考的问题:如何居中输出? 如何输出空格?

下面是主函数体

#include<iostream>
using namespace std;int fun(int n);
void output(int n,char x,int i);int main()
{int n;char x;cin>>n>>x;int i=fun(n);//实现计算功能 返回i 即沙漏首行符号数
~~// 调试  cout<<i;~~ output(n,x,i);//实现输出功能 计算余数 return 0;
}

(本来我想直接一个函数的 但是后来想想封装性独立性 就写多一个)

下面函数是求出第一行应打印的符号数

int fun(int n)
{int a=(n-1)/2;int i=1;if(a<3&&a>0) ;else if(a<8&&a>2) i=3;else{while(a>i){i+=2;a-=i;}}~~//调试  cout<<i<<endl;~~  return i; }

我一开始while的条件是(a>3) 显然是不对的
(哈哈哈哈哈哈但很神奇过了三个测试点 后来改了还是不对 a的情况没考虑完全 然后我就补锅哈哈哈)

下面是输出函数 我是分开了两半来输出的 一个上三角递减 一个下三角递增 然后余数我是拿了个sum来算用了多少个符号再减出来

void output(int n,char x,int i)
{int m=i;int sum=0;//沙漏中符号个数 算余数 while(m>0)//输出递减 有1 {if(m<i)//判断是否首末行 否则输出空格使得沙漏居中 {for(int p=(i-m)/2;p>0;p--)//注意是居中 不是靠右 p要除以2的{cout<<" ";}}for(int p=m;p>0;p--)//输出符号 {cout<<x;}cout<<endl;sum+=m; m-=2;}m=3; while(m<=i)//输出递增 {if(m<i)//判断是否首末行 否则输出空格使得沙漏居中 {for(int p=(i-m)/2;p>0;p--)//注意是居中  {cout<<" ";}} for(int p=m;p>0;p--)//输出符号 {cout<<x;}cout<<endl;sum+=m;m+=2;}cout<<n-sum;}

一定要注意循环的条件判断啊!

然后我就对比了一下给的参考代码 首先很大不同就是运行时间 我的代码费时多了

#include<iostream>
#include<cmath>
using namespace std;int main()
{int x, i, j, n, blank, count;char ch;cin >> n >> ch;for(count=1, x=1; count+(x+2)*2<=n; count+=(x+2)*2, x+=2);//计算可以输出的符号总数(count),以及第一行的符号个数(x) 

在计算count的时候 先用 (x+2)代替 最后再x+2
他这样是先把count需要用到的符号数先算出来了 x从3一直+2下去
他的循环的判断条件很好 (哈哈哈哈我的什么鬼)

然后是他的输出

//上半区,含中心点 for(i=x, blank=0; i>=1; blank++, i-=2){//i:当前行的符号个数,blank:当前行的行首空格个数 for(j=0; j<blank; j++)cout << " "; //输出当前行的行首空格 for(j=0; j<i; j++)cout << ch;    cout << endl;//行末空格无需输出 }//下半区,由3个符号开始输出 for(i=3, blank-=2; i<=x; blank--, i+=2){for(j=0; j<blank; j++)cout << " ";for(j=0; j<i; j++)cout << ch;cout << endl;}cout << n-count << endl; //输出剩余空格 return 0;
}

输出感觉跟我的差不多 但他写得好简洁啊
(还有就是原来那个1叫做中心点啊哈哈哈)

(好了 美好的一天就这么过去了 我要去看电视了)
(不喜欢打代码的小朋友今天有更喜欢打代码了吗)

20200205 打印沙漏相关推荐

  1. (C++)1027 打印沙漏

    笔记:星号右边的空格不用打印 #include<cstdio> #include<cmath> #include<cstring> #include<algo ...

  2. PAT_B_1027 打印沙漏

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

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

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

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

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

  5. 1027. 打印沙漏(20)

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

  6. CCCC L1-002. 打印沙漏【图形打印】

    L1-002. 打印沙漏 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给 ...

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

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

  8. c++string转char数组_C++ 算法题解:打印沙漏、素数对猜想、数组元素循环右移问题...

    作者:鲸90830  链接:https://www.cnblogs.com/whale90830/p/10688802.html DS_起步自测 中国大学MOOC_陈越.何钦铭_数据结构_起步能力自测 ...

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

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

最新文章

  1. SDOI2015 约数个数和(莫比乌斯反演经典、双上限整除分块)超详细笔记
  2. yii和thinkphp杂谈
  3. C#的Equals不区分大小写
  4. poj 2452(RMQ+二分)
  5. 注释嵌套注释_注释梦Night
  6. java商城_java网上商城系统怎么样?优势又有哪些?
  7. ftk学习记(窗口全屏设置篇)
  8. bootstrap课程5 bootstrap中的组件使用的注意事项是什么
  9. 登量子位“AI领航企业榜单”,联想用实力说话
  10. SAS 9.4 的sid问题解决方案汇总(头疼...)
  11. ConceptDraw Office Pro v8.0.2 Keygen
  12. 【Java开发】之配置文件的读取
  13. ensembl-vep/VEP 注释软件安装及测试 超简单版(conda vep、百度网盘数据库)
  14. 两台计算机共享文件夹,两台电脑共享文件,详细教您两台电脑如何共享文件
  15. HA 高可用软件系统保养指南
  16. 描述并简要比较TCP/IP协议体系及0SI/RM协议体系
  17. Spring Cloud-Alibaba
  18. 二叉树的前序遍历,中序遍历,后序遍历
  19. 【云周刊】第135期:云栖大会珍贵技术资料:20+覆盖容器技术、智能工业、大数据、开源数据库
  20. HTML5期末大作业:零食官网网站设计——美食零食官网(6页) html网页制作期末美食作业成品_小吃类网页设计期末作业

热门文章

  1. 基于激光视觉传感器的工业机器人焊缝跟踪系统的优缺点
  2. ​【交通标志识别】基于BP神经网络实现交通标志识别matlab代码
  3. windows下使用控制台打开conda虚拟环境
  4. 工业4.0智能工厂建设核心:APS高级计划排程
  5. 计算机与地球科学,地球科学与遥感
  6. CentOS7 无法启动
  7. 杰里之104X之输出 3 路 PMW【篇】
  8. 百度、腾讯、滴滴,如何看2019智能网联汽车发展 | 2019互联网岳麓峰会...
  9. 2021编程语言排行榜出炉,C#年度语言奖
  10. 捷径:通过快捷指令下载应用图标、音乐封面和电影海报