我有c程序问题打印环型输出。
当用户输入数字5时,程序输出如下;
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
我使用以下逻辑,但我真的失败了,我不知道。
int main()
{
int a[50],i,j=0,n,k;
printf("Enter the number=");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
if(i>n)
{
j=j+5;
}
else if(i>((2*n)-1))
{
j--;
}
else if(i>((3*n)-2))
{
j=j-5;
}
else if(i>(4*n-4))
{
j++;
}
}
}
很抱歉要问整个程序逻辑但是
,我真的不知道,请帮帮我......
答案 0 :(得分:0)
解决此问题的一种简单方法是分配一个大小为N * N的数组,并使用螺旋后面的直接循环填充它。然后你可以打印每行N个元素的数组内容。
答案 1 :(得分:0)
这里是你要找的东西
#include <stdio.h>
#define max 25
int main()
{
int spiral[max][max] = {{0}}; // initializing array with 0
int r, c, i = 0, j = -1, count = 1;
printf("\nEnter the row and column for spiral matrix:\n");
scanf("%d%d", &r, &c);
while (count <= r * c) // this loop executes till all the blocks of
{
// array r*c are filled with 0
while (j < c - 1) // Filling the location from left to right
{
// with value of variable count
if(spiral[i][j+1]!=0) // Here we are checking if that location
break; // is already occupied
spiral[i][++j] = count++;
}
while (i < r - 1) // Filling the location from top to bottom
{
if (spiral[i+1][j] != 0)
break;
spiral[++i][j] = count++;
}
while (j > 0) // Filling the location from right to left
{
if(spiral[i][j-1] != 0)
break;
spiral[i][--j] = count++;
}
while (i > 0) // Filling the column from bottom to top
{
if (spiral[i-1][j] != 0)
break;
spiral[--i][j] = count++;
}
}
for (i = 0 ; i < r ; i++)
{
for (j = 0 ; j < c ; j++)
{
printf("%3d",spiral[i][j]); // print the matrix
}
printf("\n");
}
return 0;
}