首先有一个规律:当一个数字归位的时候,所有数字都会归位。
因此只需要模拟一个数字就可以了。
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int n; int main() { while (~scanf("%d", &n)) { int ans = 0; int now = 1; while (1) { if (now <= n) now = now * 2; else now = 2 * (now - n) - 1; ans++; if (now == 1) break; } printf("%d ", ans); } return 0; }