34567,填在圆圈里,使每条线上三个数的和相等

在业主群里,有邻居问一道数学题,34567,填在圆圈里,使每条线上三个数的和相等?如下图所示:

要求是至少给出三对

34567,填在圆圈里,使每条线上三个数的和相等

这位邻居很是心急,一道也没做出来,对于程序员来讲,其实不难,借助于计算机很容易实现,于是用js简单地实现了(没有特别进行优化,层次有点深)。

var arr = [3, 4, 5, 6, 7];
var size = arr.length;
var maxLength = 3;
var t = Array();
var tmp = [];
var i = 0;
for (var a = 0; a < size; a++) {
    for (var b = 0; b < size; b++) {
        tmp = [];
        for (var d = 0; d < size; d++) {
            if (b != a && b != d && a != d) {
                tmp.push(arr[a]);
                tmp.push(arr[b]);
                tmp.push(arr[d]);
                if (tmp.length == maxLength) {
                    t[i] = tmp;
                    i++;
                    tmp = [];
                }
            }
        }
    }

}
if (t.length > 0) {
    var tSize = t.length;
    for (var m = 0; m < tSize; m++) {
        for (var n = 0; n < tSize; n++) {
            if (m != n && t[m][1] == t[n][1]) {
                if (arrayEquesCount(t[m], t[n]) == 1) {
                    if (t[m][0] + t[m][1] + t[m][2] == t[n][0] + t[n][1] + t[n][2]) {
                        console.log(t[m] + "==" + t[n]);

                    }

                }
            }
        }
    }
}

function arrayEquesCount(arr1, arr2) {
    var count = 0;
    var arr1Size = arr1.length;
    var arr2Size = arr2.length;
    for (var m = 0; m < arr1Size; m++) {
        for (var n = 0; n < arr2Size; n++) {
            if (arr1[m] == arr2[n]) {
                count++;
            }
        }
    }
    return count;
}

 

 

 

最终答案不考虑位置关系,共有24组,如下图所示:

34567,填在圆圈里,使每条线上三个数的和相等

相关文章

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注




Enter Captcha Here :

qq
微信
微信
分享本页
返回顶部