只要考虑第一张牌什么时候返回原来的位置就可以了。证明:
构造f(x) = 2x % (2n+1), x = 1~2n
则这个f(x)就是进行一次变换的函数关系。
进行i次变换,则变成(2^x * i) % (2n+1)。
假设(2^j) % (2n+1) = 1
那对于任何k,(2^j * k) % (2n+1) = k
即当第一张牌回归原位的时候,所有的牌都回归原位。证毕
构造f(x) = 2x % (2n+1), x = 1~2n
则这个f(x)就是进行一次变换的函数关系。
进行i次变换,则变成(2^x * i) % (2n+1)。
假设(2^j) % (2n+1) = 1
那对于任何k,(2^j * k) % (2n+1) = k
即当第一张牌回归原位的时候,所有的牌都回归原位。证毕
#include<iostream>
using namespace std;
int card(int id);
int n;
int main()
{
int m,temp;
while(cin>>n)
{
for(m=1,temp=card(1);temp!=1;m++) temp=card(temp);
cout<<m<<endl;
}
return 0;
}
int card(int id)
{
if(id%2==0) return id/2;
else return id/2+n+1;
}
using namespace std;
int card(int id);
int n;
int main()
{
int m,temp;
while(cin>>n)
{
for(m=1,temp=card(1);temp!=1;m++) temp=card(temp);
cout<<m<<endl;
}
return 0;
}
int card(int id)
{
if(id%2==0) return id/2;
else return id/2+n+1;
}