#include #include #include using namespace std; // 移動数を計算 int getMoveNum(int x) { int num = 0; while(x > 0) { if(x&1==1) num ++; x = x >> 1; } return num; } int main() { int N; cin >> N; vector flag(N+1, false); flag[1] = true; // スタート位置にいるので int cnt = 1; vector pos; pos.push_back(1); while(true) { // 移動先が無い時 if(pos.size() == 0) { cnt = -1; break; } // 移動先にNが含まれるとき else if(find(pos.begin(), pos.end(), N) != pos.end() ) { break; } // 移動 vector tmpPos; for(int i=0; i 0 && !flag[nextPos]) { flag[nextPos] = true; tmpPos.push_back(nextPos); } } pos = tmpPos; // 移動数をカウント cnt ++; } cout << cnt << endl; return 0; }