SCAU 2019初出茅庐 18598 开门,你的圣诞礼物
Posted myh808
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SCAU 2019初出茅庐 18598 开门,你的圣诞礼物相关的知识,希望对你有一定的参考价值。
描述:
快要到圣诞节了,说到圣诞节首先让人想到圣诞老人和圣诞树。 实际上,圣诞节是为了庆祝耶稣的降生,但是这跟我们没有什么关系,有兴趣可以选修英语选修中讲述历史文化的圣经课。 所以圣诞节跟我们有什么关系呢,还是有关系的,steam平台上的绝大部分游戏会在这段时间打折。 为了迎接圣诞节的特大折扣,sen准备装饰n颗圣诞树,这些树的高度可能不相同。 但是sen太忙了,他还有很多屁事要做,他先想好了几个大概的种法,等你用程序画个图来看看最终结果是怎么样的。 圣诞树的画法如下: 高度为2的圣诞树: * /-\\ /-| |-\\ | | 高度为3的圣诞树: * /-\\ /-| |-\\ /---| |---\\ | | 高度为4的圣诞树: * /-\\ /-| |-\\ /---| |---\\ /-----| |-----\\ | | 高度为5的圣诞树: * /-\\ /-| |-\\ /---| |---\\ /-----| |-----\\ /-------| |-------\\ | | sen觉得你很聪明所以不用给出更多的例子,更高的高度以此类推就好了 圣诞树按给出的顺序种 每棵树之间用一个空格隔开
输入格式 :
第一行输入t表示case数(1<=t<=100) 每个case第一行输入n表示有n颗圣诞树(1<=n<=5) 每个case第二行n个数字ai表示圣诞树的高度(2<=ai<=10)
输出格式:
对于每个case输出最终的样子 每个case之后需要加一个换行(因此最后一个case的末尾会多出两行)
输入样例:
2 2 4 2 3 4 2 3
输出样例:
* /-\\ /-| |-\\ * /---| |---\\ /-\\ /-----| |-----\\ /-| |-\\ | | | | * /-\\ * /-| |-\\ * /-\\ /---| |---\\ /-\\ /-| |-\\ /-----| |-----\\ /-| |-\\ /---| |---\\ | | | | | |
提示:
这道题真是太简单了 如果你5分钟写出来 圣诞老人就会在2019圣诞节的晚上给你送礼物
代码实现(参考):
#include<iostream>
#include<string.h>
using namespace std;
const int maxTop=12,maxBreadth=200;
int main()
int t;
scanf("%d",&t);
while(t--)
int n;
scanf("%d",&n);
char g[maxTop][maxBreadth];
memset(g,' ',sizeof(g));//初始化为空格
int h[10],maxh,maxb=n-1,d,pre;
for(int i=0;i<n;i++)
scanf("%d",&h[i]);
if(i==0) maxh=h[0];
else if(h[i]>maxh) maxh=h[i];//确定最高树的高度
maxb+=4*h[i]-1;//确定所有树的宽度和
for(int i=0,pre=0;i<n;i++)
d=pre+2*h[i]-1;//确定树的对称轴所在坐标
g[maxTop-h[i]-2][d]='*';
for(int j=maxTop-1;j>maxTop-1-h[i];j--)
g[j][d-1]=g[j][d+1]='|';
for(int j=maxTop-1-h[i],k=0;j<maxTop-1;j++,k+=2)
g[j][d+k]=g[j][d-k]='-';
g[j][d+k+1]='\\\\';
g[j][d-k-1]='/';
if(k>2)
for(int l=k-1;l>=2;l--)
g[j][d+l]=g[j][d-l]='-';
pre+=4*h[i];//确定下一棵树与左边界的距离
for(int i=maxTop-maxh-2;i<maxTop;i++)
for(int j=0;j<maxb;j++)
putchar(g[i][j]);
puts("");
puts("");
return 0;
以上是关于SCAU 2019初出茅庐 18598 开门,你的圣诞礼物的主要内容,如果未能解决你的问题,请参考以下文章