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

Q36 上下左右が反転した数字


JavaScriptのソース

var NumArr = new Array('0','1','2','5','6','8','9');
var mSameCnt = 0;
var mGreaterCnt = 0;

DerivePatternCnt();
var mTotalCnt = mSameCnt + mGreaterCnt * 2;

var Answer = 0;

//1桁目 < 反転後の12桁目の場合
Answer += mGreaterCnt * mTotalCnt**5;

//2桁目 < 反転後の11桁目の場合
Answer += mSameCnt * mGreaterCnt * mTotalCnt**4;

//3桁目 < 反転後の10桁目の場合
Answer += mSameCnt**2 * mGreaterCnt * mTotalCnt**3;

//4桁目 < 反転後の 9桁目の場合
Answer += mSameCnt**3 * mGreaterCnt * mTotalCnt**2;

//5桁目 < 反転後の 8桁目の場合
Answer += mSameCnt**4 * mGreaterCnt * mTotalCnt;

//6桁目 < 反転後の 7桁目の場合
Answer += mSameCnt**5 * mGreaterCnt;

document.write('解は' , Answer , '通り');

//1桁目と12桁目が確定した時の場合の数を求める
function DerivePatternCnt()
{
    for(var Ind1 in NumArr){
        for(var Ind2 in NumArr){
            var Each1 = NumArr[Ind1];
            var Each2 = NumArr[Ind2];

            var SeiStr = Each1 + Each2;

            var wk1 = Each1;
            if(Each1 == '6') wk1 = '9';
            if(Each1 == '9') wk1 = '6';
           
            var wk2 = Each2;
            if(Each2 == '6') wk2 = '9';
            if(Each2 == '9') wk2 = '6';

            var RevStr = wk2 + wk1;

            if(SeiStr == RevStr){
                //document.write(SeiStr , 'は、反転させると等しい<br>');
                mSameCnt++;
            }
            if(SeiStr < RevStr){
                //document.write(SeiStr , 'は、反転後のほうが大きい<br>');
                mGreaterCnt++;
            }
        }
    }
}


実行結果

解は6920584776通り


解説

場合分けして解いてます。