トップページに戻る    次のJavaScriptのサンプルへ    前のJavaScriptのサンプルへ

Q33 ホワイトデーのお返し


JavaScriptのソース

Solve(     5,    10);
Solve(543210,987654);

function Solve(pM,pN)
{
    var Answer = 0;
    for(var I = 0 ; I * 3 <= pN ; I++){
        var RestM = pM - I;
        var RestN = pN - I * 3;
        if(HasAnswer(RestM,RestN)){
            Answer++;
        }
    }
    console.log('Answer=' + Answer);
}

// 連立方程式の解の有無を調べる
//  X+ Y = RestM
// 2X+ Y = RestN
function HasAnswer(pRestM , pRestN)
{
    // 加減法でXを求める
    var X = pRestN - pRestM;

    // Yの範囲をチェック
    return (0 <= X && X <= pRestM);
}


実行結果

Answer=3
Answer=222223


解説

ループをネストさせるのではなく、
連立方程式を解くようにして、速度を上げてます。