注解
1、模拟整个过程,第一张牌洗牌一次后变为第二张,再洗牌一次后变为第四张,如此下去,前一半时每次的位置变为前一次的2倍,后一半时每次的位置变为(temp-N)*2-1。
代码
#include <iostream>
using namespace std;
int main() {
int N;
while(cin>>N) {
int temp = 1;
int ans = 0;
int flag = 1;
while(temp!=1 || flag) {
if(temp<=N) {
temp *= 2;
ans++;
} else {
temp = (temp-N)*2-1;
ans++;
}
if(temp==1) {
flag = 0;
}
}
cout<<ans<<endl;
}
return 0;
}