1027 打印沙漏

简介: 1027 打印沙漏

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

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

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

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

输入格式:

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

输出格式:

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

输入样例:

19 *

输出样例:

*****
 ***
  *
 ***
*****
2
#include<iostream>
using namespace std;
void printsl(char ch, int n);
int main()
{
  int N; char ch;
  cin >> N >> ch;
  int sum = 0;
  int i=1;
  sum += i;
  for ( i = 3; sum <= N; i+=2) {
    sum += 2 * i;
  }
  i -= 2;
  sum -= 2 * i ;
  i -= 2;
 
  printsl(ch, i);
  cout << N - sum;
  return 0;
}
 
void printsl(char ch,int n) {
  for (int i = 0; i < (n+1)/2; i++) {
    for (int j = 0; j < i; j++) 
      cout << " ";
    for (int j = 0; j < n - 2*i; j++)
      cout << ch;
    cout << endl;
  }
 
  for (int i = (n+1)/2+1; i < (n + 1); i++) {
    for (int j = 0; j <n-i ; j++)
      cout << " ";
    for (int j = 0; j < 2 * i-n; j++)
      cout << ch;
    cout << endl;
  }
}
相关文章
|
7月前
|
C++
【PTA】​L1-002 打印沙漏 ​ (C++)
【PTA】​L1-002 打印沙漏 ​ (C++)
81 0
【PTA】​L1-002 打印沙漏 ​ (C++)
|
7月前
|
编译器
11.14作业(打印图案,乘法表右对齐,圆周率,哥德巴赫猜想)
11.14作业(打印图案,乘法表右对齐,圆周率,哥德巴赫猜想)
|
7月前
输出字母沙漏
输出字母沙漏
|
2月前
|
人工智能
打印出杨辉三角形
打印出杨辉三角形。
73 17
|
7月前
23.输出正/反九九乘法表
23.输出正/反九九乘法表
39 2
|
7月前
|
弹性计算 运维 Shell
打印9*9 乘法表
【4月更文挑战第29天】
56 1
|
7月前
L1-002 打印沙漏
L1-002 打印沙漏
51 0
|
7月前
|
机器学习/深度学习 C语言 C++
『C/C++』Eg5: 打印沙漏
『C/C++』Eg5: 打印沙漏
|
C语言
C语言:打印用 * 组成的带空格直角三角形图案
思路: 总体思路: 找到规律: 行数 + 列数 < 三角形长度 - 1 打印 两个空格(题目要求带空格的三角形) 其它情况下打印 *号和空格(题目要求带空格的三角形) 使用 while循环 进行多组输入
310 0
输出三个乘法表,按照完整乘法表、下三角乘法表、上三角乘法表的顺序输出,每个表中间空一行。对于每个乘法表,首行升序输出的 11 到 99 数与数之间恰好有三个空格,接下来 10 行每栏内容都需要
输出三个乘法表,按照完整乘法表、下三角乘法表、上三角乘法表的顺序输出,每个表中间空一行。对于每个乘法表,首行升序输出的 11 到 99 数与数之间恰好有三个空格,接下来 10 行每栏内容都需要
82 0