3709 - 螺旋矩阵
时间限制 : 1 秒
内存限制 : 128 MB
从键盘输入一个整数(1~20)
则以该数字为矩阵的大小,把1,2,3…n*n 的数字按照顺时针螺旋的形式填入其中。
例如:
输入数字2,则程序输出:1 2
4 3
输入数字3,则程序输出:
1 2 3
8 9 4
7 6 5
<span style="line-height:1.5;">要求格式:每个数据宽度为4,左对齐。</span>
题目输入
题目输出
输入/输出样例
输入格式
4
输出格式
1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7
C语言解答
#include<stdio.h> #include<string.h> int main() { int a[21][21]; memset(a,0,sizeof(a)); int n; scanf("%d",&n); int count=1,e=0; int left=0,right=n; while(e<=n/2) { for(int i=left;i<right;i++) { a[e][i]=count++; } for(int i=left+1;i<right;i++) { a[i][n-1-e]=count++; } for(int i=right-2;i>=left;i--) { a[n-1-e][i]=count++; } for(int i=right-2;i>=left+1;i--) { a[i][e]=count++; } left++,right--,e++; } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { printf("%-4d",a[i][j]); } printf("\n"); } return 0; }
C++解答
#include <iostream> #include <iomanip> using namespace std; int M[20][20]; int k=1; void f(int x,int len)//从坐标x,x这个位置,填充一圈,圈长为len { int i; if(len<=0) return; if(len==1) M[x][x]=k; else { for(i=0;i<len-1;i++) M[x][x+i]=k++; for(i=0;i<len-1;i++) M[x+i][x+len-1]=k++; for(i=len-1;i>0;i--) M[x+len-1][x+i]=k++; for(i=len-1;i>0;i--) M[x+i][x]=k++; } f(x+1,len-2); } int main() { int n,i,j; cin>>n; f(0,n); for(i=0;i<n;i++) { for(j=0;j<n;j++) { cout<<left<<setw(4)<<M[i][j]; } cout<<endl; } return 0; }