OJ笔记 18964 蛇形方阵

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函数外面,就不易出现这样的问题

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值