例如:n = 3
一开始,序列为1 2 3 | 4 5 6
然后序列为 4 1 5 | 2 6 3
接着为 2 4 6 | 1 3 5
最后为 1 2 3 | 4 5 6
所以m = 3.
找出规律就可以解决了,只需要第一个数,也就是1的位置重新回到位置1,那整个数列就变回开始的序列了。
1的位置 i 小于等于n时,下一个位置是 2 * i ;i 大于 n 时,下一个位置是 2 * (i - n)- 1.
下面是AC的代码:
#include <iostream>
using namespace std;
int main()
{
int n, sum;
while(cin >> n)
{
sum = 0;
int i = 1;
i *= 2;
sum++;
while(i != 1)
{
if(i <= n)
i *= 2;
else
i = 2 * (i - n) - 1;
sum++;
}
cout << sum << endl;
}
return 0;
}