首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-11-20 
N*N矩阵的输出方式问题。。。。。如何让一个N*N的矩阵的输出形式是这样的呢?比如输入N3则输出123894765N4则输

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 100void 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");} 


[解决办法]

第二次见这个帖子

C/C++ code
include <stdio.h>#define N 3int main(){    int irow = 0;    int icol = 0;    int inum = 1;    int icount = N -1;    int imove_num = 0;    int array[N][N];    (void)memset(array, 0, sizeof(array));    do    {        for (imove_num = 0; imove_num < icount; imove_num++)        {            array[irow][icol] = inum++;            icol++;        }        for (imove_num = 0; imove_num < icount; imove_num++)        {            array[irow][icol] = inum++;            irow++;        }        for (imove_num = 0; imove_num < icount; imove_num++)        {            array[irow][icol] = inum++;            icol--;        }            for (imove_num = 0; imove_num < icount; imove_num++)        {            array[irow][icol] = inum++;            irow--;                }        irow++;        icol++;        icount = icount - 2;    }while (icount > 0);    if (0 == icount)    {        array[irow][icol] = inum;    }    for (irow = 0 ; irow < N ; irow++)    {        for (icol = 0 ; icol < N;icol++)        {            printf("%5d", array[irow][icol]);        }        printf("\n");    }        return 1;} 

热点排行