易语言使用推导法完成数独九宫计算。
1到9九个数字任意组合成一个三行三列的九宫。使每行没列没一斜行的和都相同计算出有多少种结果。
用两层循环试探所有可能的组合如果合格则显示不合格则淘汰
程序集变量
.版本 2
.程序集 启动窗口程序集
.程序集变量 外循环当前位置, 整数型, , , 第一层循环的计次变量
.程序集变量 内循环当前位置, 整数型, , , 第二层循环的计次变量
.程序集变量 左上, 整数型, , , 记录第一行第1列的数值
.程序集变量 中上, 整数型, , , 记录第一行第2列的数值
.程序集变量 右上, 整数型, , , 记录第一行第3列的数值
.程序集变量 中左, 整数型, , , 记录第二行第1列的数值
.程序集变量 中中, 整数型, , , 记录第二行第2列的数值
.程序集变量 中右, 整数型, , , 记录第二行第3列的数值
.程序集变量 左下, 整数型, , , 记录第三行第1列的数值
.程序集变量 中下, 整数型, , , 记录第三行第2列的数值
.程序集变量 右下, 整数型, , , 记录第三行第3列的数值
.程序集变量 数的横向显示位置, 整数型, , , 在画板显示的记录变量
.程序集变量 数的纵向显示位置, 整数型, , , 在画板显示的记录变量
执行
.版本 2 .子程序 _计算图形按钮_被单击 ' 使九宫成立中间位置必须为5 中中 = 5 数的横向显示位置 = 0 .计次循环首 (9, 外循环当前位置) ' 第一排第一个数 左上 = 外循环当前位置 ' 计算同一斜排的数值 右下 = 15 - 左上 - 中中 ' 计算第一排第二个数的可能值 .计次循环首 (9, 内循环当前位置) 中上 = 内循环当前位置 ' 与第一个数不相同 .如果真 (左上 ≠ 中上) ' 获得同一列上的数值 中下 = 15 - 中上 - 中中 ' 根据已经有数的位置计算省下的数值 .如果真 (15 - 左上 - 中上 ≤ 9 且 15 - 左上 - 中上 > 0 且 15 - 左上 - 中上 ≠ 5 且 15 - 左上 - 中上 ≠ 左上 且 15 - 左上 - 中上 ≠ 中上) ' 如果符合条件,确定第一行第3个数 右上 = 15 - 左上 - 中上 .如果真结束 .如果真 (15 - 右上 - 中中 ≤ 9 且 15 - 右上 - 中中 > 0 且 15 - 右上 - 中中 ≠ 5 且 15 - 右上 - 中中 ≠ 左上 且 15 - 右上 - 中中 ≠ 中上) ' 如果符合条件,确定第三行第3个数 左下 = 15 - 右上 - 中中 .如果真结束 .如果真 (15 - 左上 - 左下 ≤ 9 且 15 - 左上 - 左下 > 0 且 15 - 左上 - 左下 ≠ 5 且 15 - 左上 - 左下 ≠ 左上 且 15 - 左上 - 左下 ≠ 中上) ' 如果符合条件,确定第二行第1个数 中左 = 15 - 左上 - 左下 .如果真结束 .如果真 (15 - 右上 - 右下 ≤ 9 且 15 - 右上 - 右下 > 0 且 15 - 右上 - 右下 ≠ 5 且 15 - 右上 - 右下 ≠ 左上 且 15 - 右上 - 右下 ≠ 中上) ' 如果符合条件,确定第二行第3个数 中右 = 15 - 右上 - 右下 .如果真结束 ' 如果结果符合九宫原理则输出结果 .如果真 (中左 + 中中 + 中右 = 15 且 左上 + 中上 + 右上 = 15 且 左下 + 中下 + 右下 = 15 且 左上 + 中左 + 左下 = 15 且 右上 + 中右 + 右下 = 15 且 左上 + 中中 + 右下 = 15 且 左下 + 中中 + 右上 = 15 且 中左 ≠ 左下 且 右上 ≠ 中右) 数的横向显示位置 = 数的横向显示位置 + 1 显示 () .如果真结束 .如果真结束 .计次循环尾 () .计次循环尾 ()
显示格式
采用画板定位写出
.版本 2 .子程序 显示, , , 把合格的结果显示出来 数的纵向显示位置 = 数的横向显示位置 % 4 .如果真 (数的纵向显示位置 = 0) 数的纵向显示位置 = 4 .如果真结束 ' 定位写出 画板1.定位写出 (40 + (数的纵向显示位置 - 1) × 80, 15 + 80 × (数的横向显示位置 \ 5), 到文本 (左上) + “ ” + 到文本 (中上) + “ ” + 到文本 (右上) + #换行符 + 到文本 (中左) + “ ” + 到文本 (中中) + “ ” + 到文本 (中右) + #换行符 + 到文本 (左下) + “ ” + 到文本 (中下) + “ ” + 到文本 (右下))