首页 > 试题广场 >

打印沙漏(20)

[编程题]打印沙漏(20)
  • 热度指数:20780 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印

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

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

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


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

输入

19 *

输出

*****
 ***
  *
 ***
*****
头像 select*fromuse
发表于 2019-12-03 15:35:23
分析 首先可以证明,这个漏斗是一个等差数列。令n表示第n行,表示第n行所含有的元素个数,表示前n行元素总数。那么一个: *** ***** *******这样的图形,我们直接将3个元素作为第一行(后面指出为什么这样做),则得到,,联立可得 本题条件需要用正整数组成的最大的沙漏形状,则 展开全文