以下程序是 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我曾多次尝试,但无济于事。我怎么能找到解决方案?
答案 0 :(得分:1)
找到该程序正确顺序的一种可能方法是认识到
1 2 3 4 5
至1
);这是循环for(i=1;i<=n;i++)
1 2 3 4 5
)和降序(4 3 2 1
)的情况;这是if(i%2!=0)
if
块,而另一个循环必须用于减少数字并属于else
块< / li>
x
,y
)仅在递增情况下使用,而其他变量(z
,a
,b
)仅在递减的情况下,因此引用语句属于相应的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;
}