【MATLAB编程】输出所有的九宫图

【问题描述】九宫图是我国古老的数学问题,也是一种数字艺术,就是把1~9九个数字填到3行3列九个方格中,使其每一横、坚、斜行之和都等于15。

【九宫图历史】
《系辞》云:“河出图,洛出书,圣人则之。”在宋朝之前,洛书的记述只有文字。

九宫图实物最早发现于西汉,1977年中国考古学家在安徽阜阳县双古堆西汉古墓中发现汉文帝七年(前173年)的太乙九宫占盘,乃是中国汉代幻方的实物。东汉《数术记遗》也有记载。

后来陈抟以降认为河图洛书的洛书代表九宫图,为 1…9 这 9 个数,而 3 行、3 列以及两对角线上各自的数之和均为 15。
在这里插入图片描述

【问题分析】
1.首先用perms函数产生1-9的全排列矩阵(9!行9列)。
2.用reshape函数把全排列得到的矩阵重构成3x3的矩阵。
3.计算每一个3x3矩阵的行和、列和、主/副对角线和,并判断它们是否相等。
4.若相等,则把结果存在一个张量Result里。

【主程序代码】

%%
clear all;
close all;
%%
num = 9;
Arr = [1:num];
[SumANine,Result] = ALine(Arr);

【ALine函数】

function [SumANine,Result] = ALine(Arr)
    m         = 1;
    n         = 1;
    y         = perms(Arr);
    [col row] = size(y);
for l = 1:col
    ALine    = reshape(y(l,:),[3,3]);     
    Sumcol   = sum(ALine,2);
    Sumrow   = sum(ALine,1);
    Sumdiag  = trace(ALine);
    SumSdiag = trace(flip(ALine));
    SumANine = [Sumcol.' Sumrow Sumdiag SumSdiag];
if length(unique(SumANine)) == 1
    Result(:,:,n) = ALine;
    n             = n + 1;
end
    m = m + 1;
end

end

【运行结果】

在这里插入图片描述
喜欢我就关注我吧!!!!
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/kzpx_1106/article/details/128256342