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





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

给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入格式:
输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。
输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
输入样例:
19 *

输出样例:

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

思路:以输入:17 * 为例,先看沙漏的上端(下端方法和上端相同,只是方向相反)从沙漏的最高层5个*,到中间层1个之间的关系为 d为2的等差数列。等差数列前n项和公式为:Sn=na1+n(n-1)d/2(d=2),由于中间层1个是上端沙漏和下端沙漏共用,故可以单独打印。此时等差数列的第一项a1=3,故Sn=2n+nn。此时的Sn即为(17-1)/2(以输入17为例子),Sn=2n+nn=17,解得n=2,n即是项数(首项为3),an=a1+(n-1)d=1+2n;可得最高层为5个。再由此推算。

#include<stdio.h>
void print(int a,char ch)//在一行中打印a个ch符号
{int i;for(i=1;i<=a;i++){ printf("%c",ch);}printf("\n");
}
int main()
{int n,c,a,b,i,j;//c代表项数int flag=0;//退出循环得标识符char ch;scanf("%d %c",&n,&ch);if(n<7)//由题知,n<7时输出得都为一个*{printf("%c\n",ch);printf("%d",n-1);}else {b=(n-1)/2;//b表示以首项为3,Sn值。for(;;b--)//也许输入的数不能恰好用完,则需要把此数减小,直到可以恰好用完{for(c=1;;c++){if(2*c+c*c==b){flag=1;break;}if(2*c+c*c>b)break;}if(flag)break;} for(i=c;i>=1;i--)//打印上端沙漏{a=3+(i-1)*2;//a表示此行的符号数for(j=1;j<=c-i;j++){printf(" ");//打印 打印符号之前所需的空格}print(a,ch);//打印符号}for(j=1;j<=c;j++){printf(" ");//打印中间字符前的空格}printf("%c\n",ch);//打印 中间字符for(i=1;i<=c;i++)//打印下端沙漏{a=3+(i-1)*2;//表示符号数目for(j=1;j<=c-i;j++){printf(" ");//打印空格}print(a,ch);//打印符号}printf("%d",n-1-2*(2*c+c*c));//打印为用掉的字符数}
} 

1027 打印沙漏 (20分)相关推荐

  1. C++学习之路 | PTA乙级—— 1027 打印沙漏 (20 分)(精简)

    1027 打印沙漏 (20 分) 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 所谓"沙漏形状",是指每行输出奇数个 ...

  2. PTA练习题1027 打印沙漏 (20分)

    1027 打印沙漏 (20分) 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 所谓"沙漏形状",是指每行输出奇数个符 ...

  3. 1027 打印沙漏 (20 分)

    1027 打印沙漏 (20 分) 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 所谓"沙漏形状",是指每行输出奇数个 ...

  4. PTA乙级 1027 打印沙漏——20分

    本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 ************ ***** 所谓"沙漏形状",是指每行输出奇 ...

  5. 1027 打印沙漏 (20分)——27行代码AC(结构清晰)

    立志用更少的代码做更高效的表达 PAT乙级最优题解-->传送门 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 ********** ...

  6. 【PAT乙级】1027 打印沙漏 (20 分)

    题目地址 #include<cstdio> #include<iostream> using namespace std; int main(void) {int n; cha ...

  7. C语言程序练习-L1-002 打印沙漏 (20分)

    L1-002 打印沙漏 (20分) 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 所谓"沙漏形状",是指每行输出奇数 ...

  8. 1027. 打印沙漏(20)

    1027. 打印沙漏(20) C++AC代码(更新于2017年4月9日) 解题思路,注意到行数与第一行和最后一行字符数都是相等的,根据等差数列找关系 #include <iostream> ...

  9. 7-138 打印沙漏 (20 分)

    7-138 打印沙漏 (20 分) 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 ************ ***** 所谓" ...

最新文章

  1. GPT3 api接口调用
  2. 【CentOS 7MySQL常用操作3】,MySQL常用命令#180113
  3. numpy.random.normal
  4. Vue.js组件学习
  5. pydev插件安装方法
  6. 简单描述char(n)、varchar(n)、nchar(n)、nvarchar(n)的区别
  7. (王道408考研数据结构)第八章排序-第三节2:堆与堆排序
  8. 盘点多数企业容易犯的五个大数据错误
  9. Putty打开.pem加密的服务器
  10. Ubuntu 18.04 国内源
  11. 微软Win11 商店各个应用可单独下载
  12. 常用计算机操作技巧与方法ppt,相见恨晚的20个常用PPT小技巧
  13. delphi问题归档(转载摘录)
  14. Android11安装谷歌,Android 11正式版
  15. DP9637汽车故障诊断仪的原理与作用
  16. 【机器学习面经】AI算法岗位简历必备
  17. vue3.0 axios 图片上传
  18. 互联网 IT 精英:龙泉寺静心之旅
  19. 集成学习(Bagging和Boosting)
  20. 华科计算机考研复试书目,华中科技大学网络空间安全学院2020考研复试参考书目...

热门文章

  1. 如何将iTunes DRM-ed M4P转换为MP3?
  2. 03 body标签中的相关标签
  3. HLS / Chisel 实现CORDIC算法双曲系统
  4. VBA自动生成excel的表单及链接的方法
  5. 【计算机视觉】回顾2022年计算机视觉领域最激动人心的进展
  6. Leetcode 998
  7. Ubuntu系统开机黑屏,且左上方存在不停闪烁的横杠
  8. 信息爆炸的时代怎样来读书
  9. 【CSS】定位--静态定位-相对定位-绝对定位-子绝父相-固定定位-粘性定位
  10. 网页内容高度不够时,让footer处于页面底部的方法(不是固定在底部)