怎么做这个啊,我写得运行不出来

img

img


有朋友会编这个程序吗,我写的好像因为循环太多,运行不出来,可以教教我吗?

浓缩版,供参考:

#include<stdio.h>
int main()
{
  int i,j,l,m,pos,n;
  char k;
  scanf("%d",&n);
  for(pos=l=0, m=n-1; m>=0; ++l<n?pos=l:pos=--m)
      for(i=pos,j=0;j<=2*pos+1;i<n?i++:j++)
          printf("%c",i<n?' ':(j<=pos)?(k=j+1+'0'):((--k)!='0'?k:'\n'));
  return 0;
}

普通写法:

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

img

#include<stdio.h>
int main()
{
   int n,i,j;
   while((scanf("%d",&n))!=EOF)
   {
       for(i=1;i<2*n;i++)//i为第i行答案
       {
           int a=0;//每次都要将a初始化
           if(i<=n)//开始分增大与缩小
           {
             for(j=1;j<=n+i-1;j++)//这个j是关键,每一行的长度为n+i-1;
           {
               if(j<=n-i)//前n-i的值都为空格
           {
               printf(" ");
           }
               if(j>n-i)//自第三个数开始从1逐渐增加直到第n个数然后自n+1个数开始减小
           {
               if(j<=n)//在第n个数之前的值是增加的
               {
                   a++;//一定是先将a值增加再输出
                   if(j==n+i-1)//为了让第一个1也能有换行符所以这么搞
                   {
                       printf("%d\n",a);
                   }
                   else printf("%d",a);
               }
               else//第n+1个值开始增加,先将a减小,再输出
               {
                   a--;
                   if(a>1)
                   {
                       printf("%d",a);
                   }
                   else//直到通过a判断,当a==1时说明减到底了,直接break即可
                   {
                       printf("%d\n",a);
                       break;
                   }

               }
           }
           }
        }
        else //当i>n时
        {
            for(j=1;j<=3*n-i-1;j++)//让j从最大的n-1开始减小到1;
           {
           if(j<=i-n)//前i-n的值都为空格
           {
               printf(" ");
           }
           if(j>i-n)//自第i-n个数开始从1逐渐增加直到第n个数然后自n+1个数开始减小
           {
               if(j<=n)//在第n个数之前的值是增加的
               {
                   a++;//一定是先将a值增加再输出
                   if(j==3*n-i-1)//为了让第一个1也能有换行符所以这么搞
                   {
                       printf("%d\n",a);
                   }
                   else printf("%d",a);
               }
               else//第n+1个值开始减小,先将a减小,再输出
               {
                   a--;
                   if(a>1)
                   {
                       printf("%d",a);
                   }
                   else//直到通过a判断,当a==1时说明减到底了,直接break即可
                   {
                       printf("%d\n",a);
                       break;
                   }

               }
           }
           }
        }
       }

   }

return 0;
}