PTA--天梯赛题集题解--打印沙漏

简介: PTA--天梯赛题集题解--打印沙漏

题目链接:

题目链接

题目:

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

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

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

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

输入格式:

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

输出格式:

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

输入样例:

19 *

输出样例:

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

解题思路:

先计算出输入的字符的个数可以构成一个拥有几行,每行有多少个字符的沙漏;

计算完成先打印出字符,可以先打印上面一半的三角形,再打印下面一半;

最后处理字符前面空格的输出

注意:

当输入的n小于7时只能构成一个一行只有一个字符的沙漏,所以当输入小于7时要进行特别处理。

还有,所有字符使用完,剩余字符的个数依旧要输出,输出0

解题代码:

#include <bits/stdc++.h>
using namespace std;
//存放每行需要几个字符,只存沙漏一半的三角形 
//另一半倒序遍历即可 
int nums[1000];
int index1 = 0;//输入的字符个数 
int remain = 0;//保存剩余的字符个数 
//得到沙漏每行需要几个字符  
void getNum( int n ) {
  int num = 1;
  while ( num <= n ) {
    nums[index1++] = num;
    if ( num==1 ) {
      n -= num;
    } else {
      //有上下俩半的三角形 
      n -= num*2;
    }
    //等差数列,差为2
    num += 2;
  }
  //剩余的字符个数 
  remain = n;
}
int main() {
  int n;
  cin >> n;
  char c;
  cin >> c;
  //  n小于7的情况,只能输出一个 
  //  n小于7只能构成一个一行(一个字符)的沙漏 
  if ( n<7 ) {
    cout << c << endl << n-1;
    return 0;
  } 
  getNum(n);
  //输出字符
  //上面一半 
  for ( int i=index1-1; i>=0; i-- ) {
    for ( int j=0; j<index1-i-1; j++ ) {
      cout << " ";
    }
    for ( int j=0; j<nums[i]; j++ ) {
      cout << c;
    }
    cout << endl;
  }
  //下面一半 
  for ( int i=1; i<index1; i++ ) {
    for ( int j=0; j<index1-i-1; j++ ) {
      cout << " ";
    }
    for ( int j=0; j<nums[i]; j++ ) {
      cout << c;
    }
    cout << endl;
  }
  //剩余的字符个数 
  cout << remain << endl;
}
相关文章
|
人工智能 物联网 机器人
『GitHub项目圈选17』推荐5款本周 火火火 的AI开源项目
『GitHub项目圈选17』推荐5款本周 火火火 的AI开源项目
2116 1
vw、px、vh 和 rem应用场景以及区别
【4月更文挑战第2天】 vw、px、vh 和 rem应用场景以及区别
1507 10
|
移动开发 Java API
微服务技术系列教程(26) - SpringCloud- 接口管理Swagger
微服务技术系列教程(26) - SpringCloud- 接口管理Swagger
396 0
|
机器学习/深度学习 人工智能 测试技术
PsycoLLM:开源的中文心理大模型,免费 AI 心理医生,支持心理健康评估与多轮对话
PsycoLLM 是合肥工业大学推出的中文心理大语言模型,基于高质量心理数据集训练,支持心理健康评估、多轮对话和情绪识别,为心理健康领域提供技术支持。
3345 51
PsycoLLM:开源的中文心理大模型,免费 AI 心理医生,支持心理健康评估与多轮对话
|
IDE Linux 程序员
技术经验解读:【转】IO空间,IO端口,MMIO
技术经验解读:【转】IO空间,IO端口,MMIO
1166 0
|
数据采集 调度 数据库
flask-apscheduler的使用与示例
flask-apscheduler的使用与示例
1088 4
带你了解SMTP,POP3,IMAP协议
带你了解SMTP,POP3,IMAP协议
1738 0
|
人工智能 编解码 物联网
AI视频风格转换: Stable Diffusion + TemporalKit
首先通过 Temporal-Kit 这个插件提取视频中的关键帧图片,然后使用 Stable Diffusion WebUI 重绘关键帧图片,然后再使用 Temporal-Kit 处理转换后的关键帧图片,它会自动补充关键帧之间的图片,最后拼合这些图片,形成视频。
1125 1
|
JavaScript 前端开发 搜索推荐
HTML+JS 实现手机号码归属地查询功能
HTML+JS 实现手机号码归属地查询功能
619 0
HTML+JS 实现手机号码归属地查询功能
|
Web App开发 Android开发
12-appium-查看webview元素
12-appium-查看webview元素