1027 打印沙漏 (20分)
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定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分)相关推荐
- C++学习之路 | PTA乙级—— 1027 打印沙漏 (20 分)(精简)
1027 打印沙漏 (20 分) 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 所谓"沙漏形状",是指每行输出奇数个 ...
- PTA练习题1027 打印沙漏 (20分)
1027 打印沙漏 (20分) 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 所谓"沙漏形状",是指每行输出奇数个符 ...
- 1027 打印沙漏 (20 分)
1027 打印沙漏 (20 分) 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 所谓"沙漏形状",是指每行输出奇数个 ...
- PTA乙级 1027 打印沙漏——20分
本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 ************ ***** 所谓"沙漏形状",是指每行输出奇 ...
- 1027 打印沙漏 (20分)——27行代码AC(结构清晰)
立志用更少的代码做更高效的表达 PAT乙级最优题解-->传送门 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 ********** ...
- 【PAT乙级】1027 打印沙漏 (20 分)
题目地址 #include<cstdio> #include<iostream> using namespace std; int main(void) {int n; cha ...
- C语言程序练习-L1-002 打印沙漏 (20分)
L1-002 打印沙漏 (20分) 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 所谓"沙漏形状",是指每行输出奇数 ...
- 1027. 打印沙漏(20)
1027. 打印沙漏(20) C++AC代码(更新于2017年4月9日) 解题思路,注意到行数与第一行和最后一行字符数都是相等的,根据等差数列找关系 #include <iostream> ...
- 7-138 打印沙漏 (20 分)
7-138 打印沙漏 (20 分) 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 ************ ***** 所谓" ...
最新文章
- GPT3 api接口调用
- 【CentOS 7MySQL常用操作3】,MySQL常用命令#180113
- numpy.random.normal
- Vue.js组件学习
- pydev插件安装方法
- 简单描述char(n)、varchar(n)、nchar(n)、nvarchar(n)的区别
- (王道408考研数据结构)第八章排序-第三节2:堆与堆排序
- 盘点多数企业容易犯的五个大数据错误
- Putty打开.pem加密的服务器
- Ubuntu 18.04 国内源
- 微软Win11 商店各个应用可单独下载
- 常用计算机操作技巧与方法ppt,相见恨晚的20个常用PPT小技巧
- delphi问题归档(转载摘录)
- Android11安装谷歌,Android 11正式版
- DP9637汽车故障诊断仪的原理与作用
- 【机器学习面经】AI算法岗位简历必备
- vue3.0 axios 图片上传
- 互联网 IT 精英:龙泉寺静心之旅
- 集成学习(Bagging和Boosting)
- 华科计算机考研复试书目,华中科技大学网络空间安全学院2020考研复试参考书目...