PAT1027打印沙漏(20)
2016-03-29 09:51
357 查看
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入格式:
输入在一行给出1个正整数N(<=1000)和一个符号,中间以空格分隔。
输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入格式:
输入在一行给出1个正整数N(<=1000)和一个符号,中间以空格分隔。
输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
void PAT1027(){ char ch = '*'; int N = 202; int M= N,n=0,k=0;//n:*数,k:行数 int sum = 1; for (int i = 1; i < N; ++i){ n = sum; sum += (2 * i + 1)*2; ++k; if (sum > N)break; } k = 2 * k - 1; k = (k - 1) / 2; int s = 0; //输出上半部分 for (int i = k; i > 0; --i,++s){ for (int a = 0; a < s; ++a) cout << " "; for (int j = 0; j < 2 * i + 1; ++j){ cout << ch; } cout << endl; } //输出下半部分 for (int a = 0; a < s; ++a) cout << " " ; cout << ch << endl; --s; for (int i = 1; i <= k; ++i, --s){ for (int a = 0; a < s; ++a) cout << " "; for (int j = 0; j < 2 * i + 1; ++j){ cout << ch; } cout << endl; } s = N - n; cout << s << endl; }
相关文章推荐
- 监控脚本程序
- 国际名校公开课 斯坦福大学公开课 :机器学习课程 机器学习的动机与应用 学习笔记
- 输入
- 通过命令查询并关闭占有端口的任务
- SFTP对文件重命名 删除 退出 查看
- java 内存溢出解决
- HTML5+Spring-MVC实现手机端上传图片
- Android图片加载库:Picasso详解
- caffe源码理解之inner_product_layer
- Escape 解决中文乱码(URLDecoder: Illegal hex characters in escape (%) pattern - For input string: "u6")
- mysql my.ini配置文件修改无效
- Centos7 安装 JDK8
- SQLite学习笔记(5)
- 经典创意slogan大全
- winform程序登陆后关闭登录窗体
- ios 星星评分(支持点击和滑动)
- samba 共享访问
- Win8系统丢失mfc110.dll
- magento 后台menu 添加item
- Spring实现AOP的4种方式