题目描述
小科跟你一起正在参加编程迷宫大赛,你们俩是一组的:一开始在一个抽数机中收取1个数m.则需要你利用编程输出1个m*m的迷宫,迷宫里填入1,2...,m*m,要求填成类似蚊香的形状(如下图)。输出3位整型数,不够3位右对齐。例如m=4时方阵如下:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
输入格式
一行,一个整数m(m≤8)
输出格式
输出蚊香形状的方阵.(输出3位整型数,不够3位右对齐。)
输入输出样例
输入样例1:
4
输出样例1:
10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4
【耗时限制】1000ms 【内存限制】128MB
这道题和“蛇形填数”非常相似(就连填数规律都是一样的!),所以可用相似方法
代码:
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
LL m,a[10][10];
int main()
{
cin>>m;
LL indx=0,maxh=m,maxl=m,minh=1,minl=1;
while(1){
for(int i=minh;i<=maxh;i++) a[i][maxl]=++indx;
maxl--;
if(indx==m*m) break;
for(int j=maxl;j>=minl;j--) a[maxh][j]=++indx;
maxh--;
if(indx==m*m) break;
for(int i=maxh;i>=minh;i--) a[i][minl]=++indx;
minl++;
if(indx==m*m) break;
for(int j=minl;j<=maxl;j++) a[minh][j]=++indx;
minh++;
if(indx==m*m) break;
}
for(int i=1;i<=m;i++){
for(int j=1;j<=m;j++) printf("%3lld",a[i][j]);
cout<<endl;
}
return 0;
}