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~!!~在线等。。。。
------解决方案--------------------
如何让一个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"); }