首页 > 学院 > 开发设计 > 正文

L1-002. 打印沙漏

2019-11-06 06:11:50
字体:
来源:转载
供稿:网友

本题要求:

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

***** *** * ********

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

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

输入格式:

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

输出格式:

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

输入样例:

19 *

输出样例:

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

代码 :

#include<iostream> using namespace std;int main() { int n; char c; cin >> n >> c; int max = 1; int m = (n + 1) / 2; int h = 0; //计算高度和最大值 while (true) { m -= max; if (max + 2 > m) { break; } max += 2; h++; } int now = max; int num = 0; //画上半部分 for (int j = 0; j <= h; j++) { for (int i = max - now; i > 0; i -= 2) { cout << ' '; } for (int i = now; i > 0; i--) { cout << c; num++; } now -= 2; cout << endl; } //画下半部分 now = 3; for (int j = 0; j < h; j++) { for (int i = max - now; i > 0; i -= 2) { cout << ' '; } for (int i = now; i > 0; i--) { cout << c; num++; } now += 2; cout << endl; } cout << n - num << endl; return 0; }
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表