天天看点

卡西莫多的钟楼

输入

测试样例有多组

输入的第一行包括了一个整数T(1 <= T <= 10),代表测试样例组数

每组测试样例输入一个整数n(1 <= n <= 10),代表发出的图案'x'的规模

输出

3             

1

3

x x\n

 x\n

x x\n

END\n

x   x\n

 x x\n

  x\n

 x x\n

x   x\n

END\n

x     x\n

 x   x\n

  x x\n

   x\n

  x x\n

 x   x\n

x     x\n

END\n

对于每组测试样例,根据整数n输出规模为n的图案'x'(小写x),其后输出一行"END"(不带引号)

规模n与图案'x'的对应规律请在样例输入输出中找出

#include<stdio.h>

int main(void)

{

    int n,m,i,j,k,t,b;

    scanf("%d",&m);

    //测试样本数 

    for(b=1;b<=m;b++)

    {

     scanf("%d",&n);

     t=n+1;

     //测试行数 

     for(i=1;i<=n+t;i++)

     {

      //采取分两步考虑的策略,正向循环1~n 

      if(i>=1&&i<=n)

      {

       //第一个空格0 1 0,01 2 10,012 3 210

       for(j=1;j<=i-1;j++)//容易发现,从0开始每次加一,而i从1开始 

       {

        printf(" ");

       } 

       //输出x

       printf("x");

       //第二个空格1 0 1,31 0 13,531 0 135

       for(k=1;k<=((t-i)*2)-1;k++)//规律:与中间数的距离为y,则为2*y-1 

       {

        printf(" ");

       } 

       //换行 

       printf("x\n");

      }

      else if(i==n+1)//中间数 

      {

       for(j=1;j<=n;j++) 

       {

       printf(" ");

       }

       printf("x\n");

      }

      else//逆向观察 

      {

       //第一次空格0 1 0,01 2 10,012 3 210

       for(j=i;j<n+t;j++)//空格数即与中间数的距离y-1(i已经为t+1)(中间不带等号) 

       {

        printf(" ");

       } 

       printf("x");

       //第二次空格1 0 1,31 0 13,531 0 135,7531 0 1357

       for(k=1;k<(i-t)*2;k++)//空格数即与中间数的距离2*y-1(所以k<而不是<=) 

       {

        printf(" ");

       }

        printf("x\n"); 

      }    

     }

     printf("END\n");     

    }

    return 0;

继续阅读