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;
}
相关文章
|
6月前
|
机器学习/深度学习 人工智能
PTA之N个数求和(细节题)天梯赛
编程题,要求计算以分子/分母形式给出的一组有理数的和,输出结果也要是最简有理数形式。输入包含正整数N(N≤100)及N个有理数,输出为和的最简形式。示例:输入5个数2/5, 4/15, 1/30, -2/60, 8/3,输出3 1/3;输入2个数4/3, 2/3,输出2。代码中包含求最大公约数的函数和计算有理数和的主要逻辑。
52 0
|
7月前
|
C语言
pta浙大版《C语言程序设计(第3版)》 习题6-4 使用函数输出指定范围内的Fibonacci数 (20分)
pta浙大版《C语言程序设计(第3版)》 习题6-4 使用函数输出指定范围内的Fibonacci数 (20分)
|
7月前
|
C语言
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-4 报数 (20分)
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-4 报数 (20分)
|
7月前
|
C语言
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-6 删除字符 (20分)
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-6 删除字符 (20分)
|
7月前
|
C语言
pta 浙大版《C语言程序设计(第3版)》题目集 习题6-6 使用函数输出一个整数的逆序数 (20分)
pta 浙大版《C语言程序设计(第3版)》题目集 习题6-6 使用函数输出一个整数的逆序数 (20分)
PTA 7-2 找奇葩 (20 分)
在一个长度为 n 的正整数序列中,所有的奇数都出现了偶数次,只有一个奇葩奇数出现了奇数次。你的任务就是找出这个奇葩。
114 0
|
机器学习/深度学习 人工智能
【第十五届蓝桥杯备赛(bushi,写文凑个数)】蓝桥OJ---排列序数
文章目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 三、知识风暴 DFS
99 0
蓝桥杯2020年第十一届JavaB组真题题目+解析+代码+答案:5.菲波那切数列最大公约数
蓝桥杯2020年第十一届JavaB组真题题目+解析+代码+答案:5.菲波那切数列最大公约数
75 0
蓝桥杯2020年第十一届JavaB组真题题目+解析+代码+答案:5.菲波那切数列最大公约数
蓝桥杯2019年第十届JavaB组真题题目+解析+代码+答案:5.迷宫
蓝桥杯2019年第十届JavaB组真题题目+解析+代码+答案:5.迷宫
145 0
蓝桥杯2019年第十届JavaB组真题题目+解析+代码+答案:5.迷宫
|
测试技术
PTA 7-1 祖传好运 (15 分)
我们首先定义 0 到 9 都是好运数,然后从某个好运数开始,持续在其右边添加数字,形成新的数字。
146 0