PTA 乙级——1027 打印沙漏 C++实现

mac2022-06-30  28

题目 打印沙漏

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

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

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

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

输入样例: 输出样例:

代码

#include <iostream> #include <iomanip> using namespace std; int main() { int n; char ch; cin >> n >> ch; int max = 1; if (n == max) // 输入为1时 { cout << ch << "\n" << 0; return 0; } n -= max; while (max<n) // 输入不为1时,找到最大一层的符号数, { if (n<2 * (max+2)) break; else max +=2; n -= 2 * max; } for (int i = max; i>0; i = i-2) // 画画 递减的 { for (int j = 0; j < (max - i) / 2; j++) cout << " "; for (int j = 0; j < i; j++) cout << ch; cout << '\n'; } for (int i = 3; i <= max; i = i + 2) // 画画 递增的 { for (int j = 0; j < (max - i) / 2; j++) cout << " "; for (int j = 0; j < i; j++) cout << ch; cout << '\n'; } cout << n; }
最新回复(0)