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 开门,你的圣诞礼物的主要内容,如果未能解决你的问题,请参考以下文章

2019年--距离北漂已经三年过去了

scau 1138 代码等式

SCAU-1076 K尾相等数

SCAU2022春季个人排位赛第六场

SCAU 算法课的题

SCAU 8640 希尔(shell)排序