FZU 1062 洗牌问题

首先有一个规律:当一个数字归位的时候,所有数字都会归位。

因此只需要模拟一个数字就可以了。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;

int n;

int main()
{
    while (~scanf("%d", &n))
    {
        int ans = 0;
        int now = 1;

        while (1)
        {
            if (now <= n) now = now * 2;
            else now = 2 * (now - n) - 1;
            ans++;
            if (now == 1) break;
        }

        printf("%d\n", ans);
    }
    return 0;
}

 

posted @ 2016-03-17 21:21  Fighting_Heart  阅读(128)  评论(0编辑  收藏  举报