2396: 【入门】【P5731】蛇形方阵
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:29
解决:11
题目描述
给出一个不大于 的正整数 ,输出 的蛇形方阵。
从左上角填上 开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有都会占用 个字符,前面使用空格补齐。
输入
输入一个正整数 ,含义如题所述。
输出
输出符合题目要求的蛇形矩阵。
样例输入 复制
4
样例输出 复制
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
提示
数据保证,。
#include<cstdio> using namespace std; int a[20][20]; int main(){ int n,k=1,x=1,y=0; scanf("%d",&n); while (k<=n*n) { /* 每一轮循环都按照:右->下->左->上的顺序填数字; 向右填数: 如果当前位置的右边没有超出边界(y<n) 而且还没有填数字(!a[x][y+1]), 则在右边(a[x][++y])的位置填写数字k,然后当前位置右移1格, 并让k自增1(k++)。 其它方向同理。 */ while(y<n&&!a[x][y+1])a[x][++y]=k++; while(x<n&&!a[x+1][y])a[++x][y]=k++; while(y>1&&!a[x][y-1])a[x][--y]=k++; while(x>1&&!a[x-1][y])a[--x][y]=k++; } for (int i=1;i<=n;i++) { for (int j=1;j<=n;j++)printf("%3d",a[i][j]); printf("\n"); } return 0; }