谢邀(其实没人邀)
首先给出解决方案(MATLAB):
>>f=perms(0:9);>>f(find((f(:,1)*100+f(:,2)*10+f(:,3)+f(:,4)*100+f(:,5)*10+f(:,6)==f(:,7)*1000+f(:,8)*100+f(:,9)*10+f(:,10))&f(:,7)~=0),:)
题主你说要最优算法,我看这题就算暴利解决总计算次数也不会超过
所以我所理解的最优算法就是代码量最少的算法(生性暴利直接枚举)
看到其他知友引用链接里用c写那么老长的代码很不能理解。
(其实看着别人用上百行代码完成了我大MATLAB在命令行里两句随意给出结果的任务其实很爽呢(%偷笑%))
(%捂脸%)枚举有点问题被发现了(已经纠正)
===================================================
解释一下语义:一共有两个命令,第一个用perms给出一个n!行10列的矩阵,就是枚举矩阵,这十个位置以3 - 3 - 4分配存储各个位数,然后第二句是筛选find是在f中找到符合要求的索引索引所对应的十个数字有 f() 给出,想看有几个解直接再嵌套个length就好哦