0

このプロジェクトのオイラー問題(Google chrome - 開発者ツールのスニペット機能を使用してコーディングおよび実行) を解決しようとしているときに、奇妙な動作に遭遇しました。

var palFound = false;
isPal = function (word) {
    var wordCount = word.length;
    for (i = 0; i < wordCount; i++) {
        if (word[i] != word[wordCount - i - 1]) {
            return false;
        }
    }
    return true;
}

for (var k = 999; k >= 100; k--) {
    for (var j = 999; j >= 100; j--) {
        var prod = k * j,
            prodString = prod + '';
        if (isPal(prodString)) {
            console.log(prod, k, j);
            palFound = true;
            break;
        }

    }
    if (palFound) {
        break;
    }
}

上記のコードは、理想的には最初に遭遇した回文積を表示し、中断する必要があります。しかし、上記のコードを実行すると、995 と 583 の積である間違った答え 580085 が表示されます。

しかし、for ループの制限が 999 か​​ら 900 に変更されると (以下に示すように)、正解が表示されます - 993 と 913 の積である 906609。

for(var k=999;k >=900;k--){
for(var j=999;j>=900;j--)

理想的には、995 と 583 ではなく、993 と 913 が最初に検出される必要があります。

4

1 に答える 1

0

外側のループの各 k 値に対して、内側のループは 999 か​​ら 100 までカウントダウンするため、k が 995 の場合、j が 583 までカウントダウンすると、回文が見つかり、コードがループから抜け出します。

j を 900 までしかカウントダウンしないように修正すると、583 に達しないため、到達する最初の回文は 993 * 913 になります。

于 2013-10-14T08:43:35.650 に答える