http://acm.hdu.edu.cn/showproblem.php?pid=1210
找规律的,追寻第一张的位置,当第一张位于n+1这个位置的时候,下一次就是重新洗好了。牌分成两部分,1....n,下次洗牌完会在2*n的位置,n+1....2*n,洗牌完会在2*n-(2*n-i)*2-1的位置。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h> #include<math.h> int main() { int n,m,i; while(scanf("%d",&n)!=EOF) { i=1; m=0; while(i!=n+1) { if(i<n+1) i*=2; else { i=2*n-(2*n-i)*2-1; } m++; } m++; printf("%d ",m); } return 0; }