如何在c中打印环型输出?

时间:2015-02-22 15:00:50

标签: c

我有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++;
            }
        }
    }


很抱歉要问整个程序逻辑但是 ,我真的不知道,请帮帮我......

2 个答案:

答案 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;
}

参考是here from more details