N*N矩阵的输出方式 有关问题。

N*N矩阵的输出方式 问题。。。。。
如何让一个N*N的矩阵的输出形式是这样的呢?比如
输入N=3 则输出1 2 3
  8 9 4
  7 6 5
N=4 则输出 1 2 3 4
  12 13 14 5
  11 16 15 6
  10 9 8 7


给出关键部分代码就OK~!!~在线等。。。。

------解决方案--------------------
C/C++ code

#include <iostream>
using namespace std;
 
void main()
{
   int N;   
   cin >> N;
   int a = 1;
   for (int i = 0;i < N;i++)
   {
       
       for (int j = 0;j < N;j++)
       {
           cout << a << " ";
           a++;
       }

       cout << endl;
   }
    
}

------解决方案--------------------
#include<stdio.h>

main()
{
int nub=0;
int i,j;
int out=1;
printf("please input the number..\n");
scanf("%d",&nub);
for(i=0;i<nub;i++)
{
for(j=0;j<nub;j++)
printf(" %d",out++);
printf("\n");


}
return 0;

}
------解决方案--------------------
C/C++ code

int main(int argc,char **argv)
{
        int N=atoi(argv[1]);
        int n=N*N;
        int ceng=1;
        int k;
        int a[N][N];
        int i=N/2,j=(N-1)/2;
        if(N%2==0){
                a[i][j++]=n--; //rinht
                a[i--][j]=n--; //up
                a[i][j--]=n--; //left
                a[i][j--]=n--; //left
                ceng=3;
        }
        else{
                a[i][j--]=n--;
                ceng=2;
        }

            for(;n>0;ceng+=2){
                for(k=0;k<ceng-1;k++)
                        a[i++][j]=n--;
                for(k=0;k<ceng;k++)
                        a[i][j++]=n--;
                for(k=0;k<ceng;k++)
                        a[i--][j]=n--;
                for(k=0;k<ceng+1;k++)
                        a[i][j--]=n--;
           }

        for(i=0;i<N;i++){
                for(j=0;j<N;j++)
                        printf("%d\t", a[i][j]);
                printf("\n");
        }

        return 0;
}

------解决方案--------------------
int main()
{
int n;
cout<<"input the numbers: \n";
cin>>n;
int a[20][20];
int left, right, up, down;
left = up = 0;
right = down = n - 1;
int s = 1;
while (left <= right)
{
for (int i=left; i<=right; i++)//顺序横向 
a[up][i] = s++;
up++; //下移一行 
for ( i=up; i<=down; i++)//顺序纵向 
a[i][right] = s++;
right--; //左移一列 
for ( i=right; i>=left; i--)//顺序横向 
a[down][i] = s++;
down--; //上移一行 
for ( i=down; i>=up; i--)//顺序纵向 
a[i][left] = s++;
left++;
}
for ( int i=0; i<n; i++)
{
for (int j=0; j<n; j++)
printf("%3.0d ",a[i][j]);
cout << endl;
}



return 1;
}
------解决方案--------------------
一个笨法子,以前有人问过写的
C/C++ code
#include <stdio.h>
#define N 100

void print(int a[][N],int n);
int main()
{
    int arr[N][N],r1,r2,c1,c2,i,j,n,k;
    printf("Input n:");
    scanf("%d",&n);
    r1=0;//第一行
    c1=0;//第一列
    r2=n-1;//最后行
    c2=n-1;//最后列
    i=1;
    k=n*n;
    while(1)//每次填充四个最外的边
    {
        for(j=c1;j<=c2;j++)
        {
            arr[r1][j]=i++;
        }
        if(i>k)
        {
            break;
        }
        r1++;
        for(j=r1;j<=r2;j++)
        {
            arr[j][c2]=i++;
        }
        if(i>k)
        {
            break;
        }
        c2--;
        for(j=c2;j>=c1;j--)
        {
            arr[r2][j]=i++;
        }
        if(i>k)
        {
            break;
        }
        r2--;
        for(j=r2;j>=r1;j--)
        {
            arr[j][c1]=i++;
        }
        if(i>k)
        {
            break;
        }
        c1++;
    }
    print(arr,n);

    return 0;
}

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