题目描述
在一个n*n的方阵里填入1,2...,n*n,要求填成蛇形。例如n=4时方阵如下:
10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4
输出3位整型数,不够3位右对齐。
输入格式
一行,一个整数n(n≤8)
输出格式
输出蛇形方阵.(输出3位整型数,不够3位右对齐。)
输入输出样例
输入样例1:
4
输出样例1:
10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4
【耗时限制】1000ms 【内存限制】64MB
这道题可以采用循环填数的方法,详见代码
代码:
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
LL n,a[10][10];
int main()
{
cin>>n;
LL maxh=n,maxl=n,minh=1,minl=1; //用来模拟回形
LL indx=0; //要填的数
while(1){
for(int i=minh;i<=maxh;i++) a[i][maxl]=++indx;//枚举行列,填数
maxl--; //将回形缩小,下次填数就会填在内圈
if(indx==n*n) break; //每次判断,填完后及时退出
for(int j=maxl;j>=minl;j--) a[maxh][j]=++indx;
maxh--;
if(indx==n*n) break;
for(int i=maxh;i>=minh;i--) a[i][minl]=++indx;
minl++;
if(indx==n*n) break;
for(int j=minl;j<=maxl;j++) a[minh][j]=++indx;
minh++;
if(indx==n*n) break;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++) printf("%3lld",a[i][j]);//printf输出前空3位
cout<<endl;
}
return 0;
}