Patchouli的金字塔
Patchouli想要绘制一个金字塔。金字塔的图案由n个正三角形和倒三角形堆叠而成,具体的绘制方法如下:
-
每个三角形由* ,/ , 和- 组成,分别代表三角形的顶点和三条边。
-
第一行只包含一个正三角形,其余各行的三角形按照”正三角形,倒三角形,正三角形,倒三角形,…… “的顺序紧致排列。
-
除最后一行外,每一行的三角形比上一行多2个。一共输出n个三角形。
例如,n=1时,图案如下:
*
/
* - *
n=2时,图案如下:
*
/
* - *
/
* - *
n=3时,图案如下:
*
/
* - *
/ /
* - *
n=7时,图案如下:
*
/
* - *
/ /
* - * - *
/ /
* - * - *
Patchouli想知道n个三角形组成的金字塔的图案是怎样的?
输入
第一行包含一个正整数T(1≤T≤100),表示样例的个数。 接下来的T行,每行包含一个正整数n(1≤n≤100),表示金字塔中的三角形的个数。
输出
对于每个样例输出对应的图案。每行的行末不包含多余的空格。
样例输入
4
1
2
3
4
样例输出
*
/
* - *
*
/
* - *
/
* - *
*
/
* - *
/ /
* - *
*
/
* - *
/ /
* - * - *
#include<stdio.h>
int main()
{
int s;
scanf("%d",&s);
while(s--)
{
int n,g,i,j,t,k;
scanf("%d",&n);
for(g=0,t=n;t>0;g++,t=t-k)
{
k=2*g+1;//g是层数
}
for(t=0;t<2*g;t++)
{
printf(" ");
}
printf("*n");
for(i=0;i<g;i++)
{
for(t=0;t<2*(g-i)-1;t++)
{
printf(" ");
}
printf("/ \");
for(t=n,j=i-1;j>=0;j--)//求出在该层的第几位t
{
k=2*j+1;
t=t-k;
}
for(k=1;k<=t-1&&k<=2*i;k++)
{
if(k%2!=0)
{
printf(" /");
}
else
{
printf(" \");
}
}//分奇偶
printf("n");
for(j=0;j<2*(g-i)-2;j++)
{
printf(" ");
}
printf("* - *");
for(k=1;k<=t-1&&k<=2*i;k++)//与上难点相似
{
if(k%2!=0)
{
continue;
}
else
{
printf(" - *");
}
}
printf("n");
}
}
}
本以为画图形我比较拿手,没想到还是用了接近两小时,有些细节方面的感觉不好快速考虑到,总体来说思维比较简单,适合我这种小菜鸡,不过accpted的那一刻真的非常兴奋,哈哈,自己花时间写出来的感觉就很nice~~
|