Fancy Mouse
- -|||
只要考虑第一张牌什么时候返回原来的位置就可以了。证明:
构造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==0return id/2;
    
else return id/2+n+1;
}
posted on 2005-09-24 01:05  Fancy Mouse  阅读(307)  评论(1编辑  收藏  举报