用户注册 登录
珍珠湾全球网 返回首页

岳东晓 -- 珍珠湾全球网 ... http://ydx.zzwave.com [收藏] [复制] [分享] [RSS] 岳东晓 -- 珍珠湾全球网

日志

越南小学三年级数学题(程序搜索)

已有 5056 次阅读2015-5-26 11:20 |个人分类:小学启蒙|系统分类:科技| 数学题, 越南

前次为了解决初中数学问题,编程上百行搜索出来的答案没有优于小朋友想出来的答案。

刚看到这道据传是越南小学三年级的数学题: 请解出下列 9 变量的方程

[ix] A +13\times B \div C + D +12 \times E - F -11 + G \times H \div I -10 = 66[/ix]



其中 A,B,C,D,E,F,G,H,I 为未知的 1 到 9 的正整数而且不得重复。我试了一下程序 brute force 搜索答案。程序如下

<div id="viet3">
<script>
function permute(v, n, handler) {
    (function _(v, n) {
        if (n == 1)
            return handler(v);
        for (var i = 0; i < n; i++) {
            _(v, n - 1);
            var tmp = v[n - 1];
            var idx = n % 2 ? 0 : i;
            v[n - 1] = v[idx];
            v[idx] = tmp;
        }
    })(v, n);
}

var D = [1, 2, 3, 4, 5, 6, 7, 8, 9];

var found = 0;
function handler(v) {
    if (66 === v[0] + 13 * v[1] / v[2] + v[3] + 12 * v[4] - v[5] + v[6] * v[7] / v[8] - 21) {
        $('#viet3').append(v.join(',') + '<br>');
        found++;
    }
}
permute(D, 9, handler);
$('#viet3').append('Found=' + found);

</script>




考虑另外一个问题,把1-9的数排成 3 x 3 的方阵,要求横竖、对角加起来都是 15。检测函数如下

function CheckN (v )  {
if(v[0]+v[1]+v[2]==15 && v[3]+v[4]+v[5]==15 && v[6]+v[7]+v[8]== 15 &&
       v[0]+v[3]+v[6]==15 && v[1]+v[4]+v[7]== 15&& v[2]+v[5]+v[8]==15 && v[0]+v[4]+v[8]==15 && v[2]+v[4]+v[6]==15) {
$('#viet3').append(v.join(',') + '<br>');
           found++;
}
}
permute(D, 9, CheckN);

当然这是非常笨拙的方法,4 x 4 方阵估计就算不动了。



路过

鸡蛋

鲜花

支持

雷人

难过

搞笑
 

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 用户注册

Archiver|手机版|珍珠湾全球网

GMT+8, 2024-3-29 05:44 , Processed in 0.032982 second(s), 8 queries , Apc On.

Powered by Discuz! X2.5

回顶部