18964 蛇形方阵
Description
给出一个不大于 9 的正整数 n,输出 n×n 的蛇形方阵。
从左上角填上 1 开始,顺时针方向依次填入数字。
如同样例所示。注意每个数字有都会占用 3 个字符,前面使用空格补齐。
输入格式
一个整数n。
输出格式
n对应的蛇形方阵。
输入样例
4
输出样例
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
提示
注意输出格式!
#include <iostream>
#include <cstdio>
using namespace std;
//在main函数外定义大内存的数组
int a[15][15];
int main ()
{
int n;
scanf("%d",&n);
//int a[15][15]; 错误!数组比较大,会出现爆出,程序无法访问内存就会出错
int x = 1,y = 0,k = 1;
while(k <= n * n){
//先走再赋值
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;
}
在运行代码的时候,操作系统会分配不同的内存区域来运行代码
- 栈区:由操作系统自动分配释放,存放函数的参数值,局部变量的值;不需要时系统会自动清除
- 堆区:由new分配的内存块,也就是说在代码中new一个数组,内存由堆区分配;堆区不由编译器管,由应用程序控制(相当于程序员控制。如果程序员没有释放掉,程序结束后,操作系统会自动回收
- 数据区:也称全局区或者静态区,存放全局的东西,比如全局变量 代码区:存放执行代码的地方,类似if else,while,for这种语句
也就是说,在main函数外面开一个数组,他的内存分配在数据区里;如果在main函数内部开数组,内存分配在栈区内。一般来说栈区的内存是比较小的,所以平常开一些小一点的数组是没问题的;但如果题目要求的数组比较大,那就会出现爆出的问题,程序无法访问内存就会出错;相对的,数据区的内存较大,所以开数组开在数据区/main函数外面,就不易出现这样的问题