今天朋友圈刷到这样一个求助,是一道小学数学题

将1-9一共9个数填入下列等式中使之成立,且每个数不能重复
( ) + ( ) = ( )
( ) + ( ) = ( )
( ) + ( ) = ( )

如果只是想想确实很难有思路,这道题的唯一解法似乎就是穷举
而如果穷举,那么就有$n!$种排列组合,也就是362880种
显然如果只是在草稿纸上这么写写是写不完的
那么就上matlab吧

废话少说,放码过来

clear;clc
a=[1 2 3 4 5 6 7 8 9];
b=perms(a);
for i=1:factorial(9)
    if b(i,1)+b(i,2)==b(i,3)
        if b(i,4)+b(i,5)==b(i,6)
            if b(i,7)+b(i,8)==b(i,9)
                disp([num2str(b(i,:))]);
            end
        end
    end
end

代码解析

最核心的就是perms()这个函数的应用,这个函数可以列出某个向量的所有排列组合的情况
比如:

perms([1 2 3])

ans =

     3     2     1
     3     1     2
     2     3     1
     2     1     3
     1     3     2
     1     2     3

输出内容是一个$n\cdot n!$的矩阵,本题中是一个9*362880的矩阵,因此这里可以存储在矩阵b中

另一个就是阶乘的函数factorial(),就不细说了,但是注意拼写一定要正确

if判断处,用三个表达式AND连接与嵌套if效果是一样的,因为计算机在判断第一个表达式为false时会自动跳过

答案

答案是:没有答案,这道题是无解的题,完全不知道出题人是怎么想的,还是说这本身就有问题是个废题

小结

这道小学数学题成功让我浪费了中午的时间,并且让我觉得毫无成就感
更何况这只是一道小学的数学题,解法却如此复杂(不是涉及高深知识的问题,而是要用穷举法这种奇葩解法的问题,并且步数还那么多)
更何况这道题居然还是个废题
有些小学的出题人是不是应该反思反思,这么搞是不是把路带偏了,小学教育本来就是很基础的教育,却非要设置一个不可逾越的鸿沟让孩子去跨

Last modification:November 12, 2022
如果觉得我的文章对你有用,请随意赞赏