• 洗牌问题 FZU


    设2n张牌分别标记为1, 2, …, n, n+1, …, 2n,初始时这2n张牌按其标号从小到大排列。经一次洗牌后,原来的排列顺序变成n+1, 1, n+2, 2, …, 2n, n。即前n张牌被放到偶数位置2, 4, …, 2n,而后n张牌被放到奇数位置1, 3, …, 2n-1。可以证明对于任何一个自然数n,经过若干次洗牌后可恢复初始状态。现在你的的任务是计算对于给定的n的值(n≤10^5),最少需要经过多少次洗牌可恢复到初始状态。

    Input
    输入数据由多组数据组成。每组数据仅有一个整数,表示n的值。
    Output
    对于每组数据,输出仅一行包含一个整数,即最少洗牌次数。
    Sample Input
    10
    Sample Output
    6

    //判断1的位置,在小于n的时候每次都是变成偶数,相当于乘以2,在大于n的时候就会变成奇数位置
    //这种题,真的是,不想说话(不会的时候就不要非要把它搞会了,知道怎么写的时候真的想砸电脑)
    #include<map>
    #include<queue>
    #include<stack>
    #include<vector>
    #include<math.h>
    #include<cstdio>
    #include<sstream>
    #include<numeric>//STL数值算法头文件
    #include<stdlib.h>
    #include<string.h>
    #include<iostream>
    #include<algorithm>
    #include<functional>//模板类头文件
    using namespace std;
    
    const int INF=1e9+7;
    const int maxn=110;
    typedef long long ll;
    
    int n;
    
    int main()
    {
        while(~scanf("%d",&n))
        {
            int a=2;
            int sum=1;
            while(a!=1)
            {
                if(a<=n)
                {
                    a*=2;
                    sum++;
                }
                else
                {
                    a=(a-n)*2-1;
                    sum++;
                }
            }
            printf("%d
    ",sum);
        }
        return 0;
    }
    
    
    
  • 相关阅读:
    数组乘积更新
    win向linux传文件
    遇到autoreconf: not found
    python thread
    aptitude
    virtualbox安装ubuntu出现“The system is running in low-graphics mode”
    webform用户控件
    LinQ to SQL
    表单验证
    文件上传
  • 原文地址:https://www.cnblogs.com/nyist-xsk/p/7264845.html
Copyright © 2020-2023  润新知