zoukankan      html  css  js  c++  java
  • 洗牌问题 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;
    }
    
    
    
  • 相关阅读:
    软件测试 Lab1 实验报告
    软件测试 Homework2
    谈谈最近的一个让我印象深刻的错误
    Bill Manager Problem Statement
    C#学习记录(九)Windows Phone开发中的Binding
    C#学习记录(八) XML Serializer尝试
    C#学习记录(七)LINQ语句及LAMDA表达式
    C#学习记录(六)
    软件测试之作业三
    软件测试之实验一
  • 原文地址:https://www.cnblogs.com/nyist-xsk/p/7264845.html
Copyright © 2011-2022 走看看