各位老师如何用数组将方阵存成这个样子,并输出??
用二维数组存储成这个样子,自然数从小到大旋转着存入。
1 2 3 4 5 6
15 16 17 18 7
14 21 19 8
13 20 9
12 10
11
[解决办法]
其它的地方加0啊!就可以了,先算出怎么排列就OK了!
[解决办法]
楼主可参考下面链接的文章,希望对你有所帮助
螺旋矩阵
[解决办法]
#include "stdio.h"int main(){ int result[21][21]; int n=0,ntag; int flag=1; int x=1,y=0; int number=0; scanf("%d",&n); ntag = n; for (;ntag>0; ntag--) { switch (flag) { case 1: { for (int i=0; i<ntag; i++) { result[x][++y] = ++number; } flag=2; } break; case 2: { for (int i=0; i<ntag; i++) { result[++x][--y] = ++number; } flag=3; } break; case 3: { for (int i=0; i<ntag; i++) { result[--x][y] = ++number; } flag=1; } break; } } for (int i=1; i<=n; ++i) { for (int j=1; j<=n-i+1; ++j) { printf("%4d",result[i][j]); } printf("\n"); } return 0;}
[解决办法]
直接求出第i行j列上的数是多少。
#include <iostream>using namespace std;int min(int x,int y,int z){ int a=99999; if (a>x) a=x; if (a>y) a=y; if (a>z) a=z; return a;}int main(){ int n; cin >> n; int i,j,k,s; for (i=1;i<=n;i++) { for (j=1;j<=n+1-i;j++) { k=min(i,j,n+2-i-j); s=3*(k-1)*(n-1)-9*(k-1)*(k-2)/2; if (i==k) cout << s+j+1-k << " "; if (n+2-i-j==k && i!=k && j!=k) cout << s+n-3*(k-1)+i-k << " "; if (j==k && i!=k) cout << 3*k*(n-1)-9*k*(k-1)/2-i+k+1 << " "; } cout << endl; } return 0;}
[解决办法]
螺旋矩阵实现的原理如下:
从原理上看,是3种输入方式的循环:1).从左往右为数组赋值,X坐标自增,y坐标不变(数组第一维和第二维分别称作x、y ;2).根据1中的x和y值,从上往下y坐标自减,x坐标自增的为数组赋值; 3).根据2中的x和y值,从下往上x坐标自减,y坐标不变的为数组赋值。