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

Problem52 2X,3X,4X,5X,6XがXと同じ数を含む

問題

125874を2倍すると251748となる. これは元の数125874と同じ数を含む.
2X,3X,4X,5X,6XがXと同じ数を含むような最小の正整数Xを求めよ.


ソース

#include <Windows.h>
#include <string>

void main()
{
    for (int I = 1; I <= 200000; I++) {
        bool IsOK = true;
        for (int J = 2; J <= 6; J++) {
            int ProdVal = I*J;
            char wkCharArr[100];
            wsprintf(wkCharArr,"%d",I);
            std::string StrI = wkCharArr;

            wsprintf(wkCharArr,"%d",ProdVal);
            std::string StrProd = wkCharArr;

            for(int K=0;K<=(int)StrProd.size()-1;K++){
                if(StrI.find(StrProd.at(K)) == std::string::npos){
                    IsOK = false;
                    break;
                }
            }
            if (IsOK == false) break;
        }
        if (IsOK) {
            printf("Answer=%d\n",I);
            return;
        }
    }
}


実行結果

Answer=142857


解説

stringクラスのfindメソッドを駆使してます。