如矩阵

    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

  找出规律,并打印出一个N*N的矩阵;规律就是从首坐标开始顺时针增大,所以

    1.需要一个变量m来递增记录进度。

    2.注意各个转折点。

具体代码实现如下:

#include <stdio.h>
#define N 5
int a[N][N]={0};

void fun(int n)
{
        int i,j;
        int m=1;
        for(i=0;i<n/2;i++)
        {
                for(j=i;j<n-i;j++)         //上边的一行
                {
                        a[i][j]=m++;
                }
                for(j=i+1;j<n-i;j++)       //右边的一列
                {
                        a[j][n-i-1]=m++;
                }
                for(j=n-i-2;j>i;j--)       //下边的一行
                {
                        a[n-i-1][j]=m++;
                }
                for(j=n-i-1;j>i;j--)       //左边的一列
                {
                        a[j][i]=m++;
                }
        }
        if(n%2==1)
                a[n/2][n/2]=m;
}


int main(void)
{
        int i,j;
        fun(N);
        for(i=0;i<N;i++)
        {
                for(j=0;j<N;j++)
                {
                        printf("%5d",a[i][j]);
                }
                printf("\n");
        }
        return 0;
}

别忘记考虑到n为奇数的情况下,需要加上最后的判断

结果如下:

[root@master tmp]# ./2
    1    2    3    4    5    6    7
   24   25   26   27   28   29    8
   23   40   41   42   43   30    9
   22   39   48   49   44   31   10
   21   38   47   46   45   32   11
   20   37   36   35   34   33   12
   19   18   17   16   15   14   13

 程序猿必读

posted on 2015-03-31 12:13  龙种人  阅读(182)  评论(0编辑  收藏  举报