易语言采用循环算法实现N阶螺旋方阵

从键盘上任意输入一个1-10之间的整数N,就产生一个NXN阶的方阵,并且此方阵是一个螺旋方阵。采用易语言循环算法来实现。
求一个螺旋方阵,其实就是分别往下、往右、往上、往左四个方向来依次填充数字,那么就是想办法判定什么时候向什么方向填充数字。
本算法采用四个子程序来分别控制往下、往右、往上、往左四个方向的填充,设四个变量,用于标识四个方向每次填充的起始位置,每填充一个方向后起始位置加1。
再用一个二维数组存放要填充的数字先将这个数组数据全部置为0,在每个方向填充时,每填充一个数字,就将这个数字存放到数组中相应的位置,通过判断要填充的位置所对应的数组数据是否为0,来确定是否终止该方向的数字填充。
通过上面规律可以推导出结果。

程序集变量

.版本 2
 
.程序集 启动窗口程序集
.程序集变量 数字数组, 整数型, , "10,10", 存放方阵中的所有数字
.程序集变量 循环变量, 整数型
.程序集变量 下起始, 整数型, , , 向下填充的起始位置
.程序集变量 右起始, 整数型, , , 向右填充的起始位置
.程序集变量 上起始, 整数型, , , 向上填充的起始位置
.程序集变量 左起始, 整数型, , , 向左填充的起始位置
.程序集变量 填充数字, 整数型, , , 被填充的数字
.程序集变量 最大值, 整数型, , , 方阵中的最大数字
.程序集变量 阶数, 整数型, , , 方阵的阶数

向下填充

.版本 2
 
.子程序 向下填充, , , 向下填充方阵中的数字
 
' 向下填充
.变量循环首 (1, 阶数, 1, 循环变量)
    ' 向方阵中填充数字
    .如果真 (数字数组 [循环变量] [下起始] = 0)
        数字数组 [循环变量] [下起始] = 填充数字
        ' 下一个要填充的数字
        填充数字 = 填充数字 + 1
    .如果真结束
 
.变量循环尾 ()
' 向下填充的下一个起始位置
下起始 = 下起始 + 1

向右填充

.版本 2
 
.子程序 向右填充, , , 向右填充方阵中的数字
 
' 向右填充
.变量循环首 (1, 阶数, 1, 循环变量)
    .如果真 (数字数组 [右起始] [循环变量] = 0)
        ' 向方阵中填充数字
        数字数组 [右起始] [循环变量] = 填充数字
        ' 下一个要填充的数字
        填充数字 = 填充数字 + 1
    .如果真结束
 
.变量循环尾 ()
' 向右填充的下一个起始位置
右起始 = 右起始 - 1

向上填充

.版本 2
 
.子程序 向上填充, , , 向上填充方阵中的数字
 
' 向上填充
.变量循环首 (阶数, 1, -1, 循环变量)
    .如果真 (数字数组 [循环变量] [上起始] = 0)
        ' 向方阵中填充数字
        数字数组 [循环变量] [上起始] = 填充数字
        ' 下一个要填充的数字
        填充数字 = 填充数字 + 1
    .如果真结束
 
.变量循环尾 ()
' 向上填充的下一个起始位置
上起始 = 上起始 - 1

向左填充

.版本 2
 
.子程序 向左填充, , , 向左填充方阵中的数字
 
' 向左填充
.变量循环首 (阶数, 1, -1, 循环变量)
    .如果真 (数字数组 [左起始] [循环变量] = 0)
        ' 向方阵中填充数字
        数字数组 [左起始] [循环变量] = 填充数字
        ' 下一个要填充的数字
        填充数字 = 填充数字 + 1
    .如果真结束
 
.变量循环尾 ()
' 向左填充的下一个起始位置
左起始 = 左起始 + 1

开始计算

.版本 2
.支持库 iext
 
.子程序 _计算图形按钮_被单击
 
超级列表框1.全部删除 ()
' 接收方阵的阶数
阶数 = 到数值 (编辑框1.内容)
' 判断阶数的范围
.如果真 (阶数 < 1 或 阶数 > 10)
    信息框 (“输入的值只能在1-10之间!”, 0, )
    返回 ()
.如果真结束
' 初始化数字数组,初始为0
.变量循环首 (1, 阶数, 1, 下起始)
    .变量循环首 (1, 阶数, 1, 右起始)
        数字数组 [下起始] [右起始] = 0
    .变量循环尾 ()
.变量循环尾 ()
' 设定要填充的第一个数字为1
填充数字 = 1
' 设定四个方向填充时的初始位置值 
下起始 = 1
左起始 = 1
右起始 = 阶数
上起始 = 阶数
' 方阵中的最大数字
最大值 = 阶数 × 阶数
' 开始填充
.判断循环首 (填充数字 ≤ 最大值)
    向下填充 ()
    向右填充 ()
    向上填充 ()
    向左填充 ()
.判断循环尾 ()
' 显示结果方阵
.变量循环首 (1, 阶数, 1, 下起始)
    超级列表框1.插入表项 (下起始, , , , , )
    .变量循环首 (1, 阶数, 1, 右起始)
        超级列表框1.置标题 (下起始 - 1, 右起始 - 1, 到文本 (数字数组 [下起始] [右起始]))
    .变量循环尾 ()
.变量循环尾 ()

资源下载

点击下载源码和511遇见视频链接地址

分享到:

用微信扫一扫,分享给朋友


发布日期:

所属分类: 编程 标签: