打印螺旋矩阵

来源:互联网 发布:淘宝宝贝卖点怎么写? 编辑:程序博客网 时间:2024/05/18 20:48

输入N,打印一个N*N的矩阵,规律就是从首坐标开始一次增大
比如N=4;打印
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7

对于这个问题的解决我给出了下面两种方法:

#define M 10int s[M][M];void fun1(int N){    int k=0,i=0,j=0;    int a=1;    for(;k<(N+1)/2;k++) //k表示第几圈    {        while(j<N-k)             s[i][j++]=a++;        i++;        j--;        while(i<N-k)            s[i++][j]=a++;        i--;        j--;        while(j>k-1)                s[i][j--]=a++;        i--;        j++;        while(i>k)            s[i--][j]=a++;        i++;        j++;    }    for(i=0;i<N;i++)    {        for(j=0;j<N;j++)            cout<<s[i][j]<<'\t';        cout<<endl;    }}void fun2(int n){    int m=1,i,j;    for(i=0;i<n;i++)        for(j=0;j<n;j++)            s[i][j]=0;    for(i=0;i<(n+1)/2;i++)    {        for(j=0;j<n-i;j++)        {            if(s[i][j]==0)                s[i][j]=m++;        }        for(j=i+1;j<n-i;j++)        {            if(s[j][n-1-i]==0)                s[j][n-1-i]=m++;        }        for(j=n-i-1;j>i;j--)        {            if(s[n-1-i][j]==0)                s[n-1-i][j]=m++;        }        for(j=n-i-1;j>i;j--)        {            if(s[j][i]==0)                s[j][i]=m++;        }    }    for(i=0;i<n;i++)    {        for(j=0;j<n;j++)            cout<<s[i][j]<<'\t';        cout<<endl;    }}void main(){    int n;    cin>>n;    fun1(n);    cout<<endl;    fun2(n);}

程序运行结果如下:
这里写图片描述

0 0
原创粉丝点击