C拼图:倒三角形图案输出的混洗代码

时间:2016-12-10 09:09:01

标签: c

以下程序是 shuffled

#include<stdio.h>
int main()
{
  int n,x=1,y,z,a,b=2,i,j,k;
  scanf("%d",&n);
  y=n+1;
  z=n-1;
  a=n-1;
  for(i=1;i<=n;i++)
  {
    x=1;
    for(j=1;j<y;j++)
    {
      printf("%d ",x);
      if(i%2!=0)
      {
        z=z-1;
      }
      a=a-2;
      z=(n-1)-b;
      b=b+2;
      printf("\n");
    }
    else
    {
      for(k=1;k<=a;k++)
      {
        printf("%d ",z);
        y=y-2;
        printf("\n");
      }
    }
    x++;
  }
  return 0;
}

一旦按正确的顺序对所有行进行排序(忽略当前的缩进),它应该编译,并且在输入 5 时,它应该输出这种模式

12345
4321
123
21
1
我曾多次尝试,但无济于事。我怎么能找到解决方案?

2 个答案:

答案 0 :(得分:1)

找到该程序正确顺序的一种可能方法是认识到

  • 有一个外部循环,贯穿 n = 5 条单独的输出线(1 2 3 4 51);这是循环for(i=1;i<=n;i++)
  • 那么必须区分输出的升序(1 2 3 4 5)和降序(4 3 2 1)的情况;这是if(i%2!=0)
  • 给出了另外两个循环,其中一个循环必须用于增加数字并属于if块,而另一个循环必须用于减少数字并属于else块< / li>
  • 初始设置后,某些变量(xy)仅在递增情况下使用,而其他变量(zab )仅在递减的情况下,因此引用语句属于相应的if / else块。

下面是正在运行的程序,与原始未排序的行并排:

#include<stdio.h>                //               #include<stdio.h>
                                 //
int main()                       //               int main()
{                                //               {
    int n,x=1,y,z,a,b=2,i,j,k;   //                 int n,x=1,y,z,a,b=2,i,j,k;
    scanf("%d",&n);              //      (1)        scanf("%d",&n);
    y=n+1;                       //                 y=n+1;            
    z=n-1;                       //                 z=n-1;
    a=n-1;                       //                 a=n-1;
    for(i=1;i<=n;i++)            //                 for(i=1;i<=n;i++) 
    {                            //  ____________   {
        if(i%2!=0)               //                   x=1; 
        {                        //      (3)          for(j=1;j<y;j++)
            x=1;                 //                   {
            for(j=1;j<y;j++)     //  ____________       printf("%d ",x);
            {                    //      (2)            if(i%2!=0)
                printf("%d ",x); //  ____________       {
                x++;             //                       z=z-1;          
            }                    //                     } 
            y=y-2;               //                     a=a-2;
            printf("\n");        //      (7)            z=(n-1)-b;
        }                        //                     b=b+2;
        else                     //                     printf("\n"); 
        {                        //  _____________    }
            for(k=1;k<=a;k++)    //                   else
            {                    //                   {
                printf("%d ",z); //      (6)            for(k=1;k<=a;k++)   
                z=z-1;           //                     {
            }                    // ______________        printf("%d ",z);
            a=a-2;               //                       y=y-2;
            z=(n-1)-b;           //      (5)              printf("\n");
            b=b+2;               // ______________      }
            printf("\n");        // ______________    }
        }                        //      (4)          x++;    
    }                            // ______________  }
    return 0;                    //      (8)        return 0;
}                                //               }

答案 1 :(得分:0)

您的方法似乎有点复杂。怎么样:

#include <stdio.h>
int main()
{
  int n, x = 1, i, j;
  scanf("%d", &n);
  for (i = n; i; i--)
  {
    if (x > 0)  for (j = 1; j <= i; j++) printf("%d ", j);
    else        for (j = i; 1 <= j; j--) printf("%d ", j);
    printf("\n");
    x *= -1;
  }
  return 0;
}