Project Euler 52
125874を2倍すると251748となる. これは元の数125874と同じ数を含む. 2x, 3x, 4x, 5x, 6xがxと同じ数を含むような最小の正整数xを求めよ.
#include <iostream> #include <deque> using namespace std; // xを各桁ごとにばらしてdequeに挿入する。 deque<int> integerDigit(int x){ deque<int> arr; while(x!=0){ arr.push_front(x%10); x/=10; } return arr; } // xがyに含まれているかどうか判定する。 // x⊂y bool isInclude(deque<int> x, deque<int> y){ bool isMatch; for(int i=0; i<(signed)x.size() ; i++){ isMatch = false; for(int j=0 ; j<(signed)x.size() ; j++){ if(x[i]==y[j]){ isMatch = true; break; } } if(!isMatch) return false; } return true; } int main(){ deque<int> arr1,arr2; arr1.clear(); arr2.clear(); bool isMatch; for(int i=1 ; i<1000000 ; i++){ arr1 = integerDigit(i); isMatch = true; arr2.clear(); for(int j=2 ; j<=6 ; j++){ arr2 = integerDigit(i*j); if( !isInclude(arr1, arr2) ){ isMatch = false; break; } } if(isMatch) cout << i << endl; } cout << "Finish" << endl; int end; cin >> end; }
実は不完全です。問題文だけからではわかりづらいですが、「同じ数を含む」は「並べ替えて同じになる」ぐらいの意味として捉えたほうがいいかも。
僕のプログラムを実行すると、9と0でできた数列の中に1つだけ答えが紛れています。