螺旋矩阵(剑指OFFER 面试等等常用)

一、一般型

一个N阶矩阵,如上图所示打印出来

#include<stdio.h>
int main(void)
{
    int a[100][100];
    int i,j,k;
    int n,m;
    int key;
    while(scanf("%d",&n)!=EOF)
    {
        key=n/2;m=1;
        for(k=1;k<=n;k++)
        {
            for(i=k-1,j=k-1;j<=n-k;j++)
            {
                a[i][j]=m;m++;
            }
            for(i=k,j=n-k;i<=n-k;i++)
            {
                a[i][j]=m;m++;
            }
            for(i=n-k,j=n-k-1;j>=k-1;j--)
            {
                a[i][j]=m;m++;
            }
            for(i=n-k-1,j=k-1;i>k-1;i--)
            {
                a[i][j]=m;m++;
            }
        }
        for(i=0;i<n;i++)
          {{for(j=0;j<n-1;j++)
            printf("%d ",a[i][j]);}
           printf("%d\n",a[i][n-1]);}
    }
    return 0;
}

此类矩阵如上,类似思想,仅仅倒回来赋值即可

 

#include<stdio.h>
int main(void)
{
    int a[100][100];
    int i,j,k;
    int n,m;
    int key;
    while(scanf("%d",&n)!=EOF)
    {
        key=n/2;m=n*n;
        for(k=1;k<=n;k++)
        {
            for(i=k-1,j=n-k;j>=k-1;j--)
            {
                a[i][j]=m;m--;
            }
            for(i=k,j=k-1;i<=n-k;i++)
            {
                a[i][j]=m;m--;
            }
            for(i=n-k,j=k;j<=n-k;j++)
            {
                a[i][j]=m;m--;
            }
            for(i=n-k-1,j=n-k;i>=k;i--)
            {
                a[i][j]=m;m--;
            }
        }
        for(i=0;i<n;i++)
          {{for(j=0;j<n-1;j++)
            printf("%2d ",a[i][j]);}
           printf("%2d\n",a[i][n-1]);}
    }
    return 0;
}

 

posted @ 2015-09-24 12:59  凌海阔天  阅读(274)  评论(0)    收藏  举报