题目描述:
Patchouli想要绘制一个金字塔。金字塔的图案由n个正三角形和倒三角形堆叠而成,具体的绘制方法如下:
-
每个三角形由
*
,/
,\
和-
组成,分别代表三角形的顶点和三条边。 -
第一行只包含一个正三角形,其余各行的三角形按照”正三角形,倒三角形,正三角形,倒三角形,…… “的顺序紧致排列。
-
除最后一行外,每一行的三角形比上一行多2个。一共输出n个三角形。
例如,n=1时,图案如下:
* / \ * - *
n=2时,图案如下:
* / \ * - * / \ * - *
n=3时,图案如下:
* / \ * - * / \ / * - *
n=7时,图案如下:
* / \ * - * / \ / \ * - * - * / \ / \ * - * - *
Patchouli想知道n个三角形组成的金字塔的图案是怎样的?
输入
第一行包含一个正整数T(1≤T≤100),表示样例的个数。 接下来的T行,每行包含一个正整数n(1≤n≤100),表示金字塔中的三角形的个数。
输出
对于每个样例输出对应的图案。每行的行末不包含多余的空格。
我的思路:
1.先把第一个*号输出
2.把输出/ \和输出* - *看做一层,每输入一个n就计算打印几层
3.每层第一行先输出“/ \”,第二行先输出“* - *”,之后第一行看需求输出‘/ ’,第二行看需求输出‘ - *’
4.输出几个' /',' \'我是定义一个count计数,到了就break,' - * '也同理。(看代码可以懂的)
#include <stdio.h>
int main ()
{
int T,n,i,j;
scanf("%d",&T);
while (T--)
{
int cen=1,count1=0,count2=0;
scanf("%d",&n);
while (cen*cen<n) cen++;//计算层数
for (i=0;i<2*cen;i++) printf(" ");//输出空格就是找规律
printf("*\n");
for (i=1;i<=cen;i++)
{
for (j=0;j<2*(cen-i+1)-1;j++) printf(" ");
printf("/ \\");
count1++;
if (count1<n)
{
for (j=2;j<2*i;j++)
{
if (j%2==0)
{
printf(" /");
count1++;
}
if (count1>=n) break;
else if (j%2!=0)
{
printf(" \\");
count1++;
}
if (count1>=n) break;
}
}
printf("\n");
for (j=0;j<2*(cen-i+1)-2;j++) printf(" ");
printf("* - *");
count2++;
if (count2+1<n)
{
for (j=0;j<i-1;j++)
{
printf(" - *");
count2+=2;
if (count2+1>=n) break;
}
}
printf("\n");
}
}
return 0;
}