首页 > 其他 > 详细

OJ练题之YT训练4

时间:2014-02-19 21:26:39      阅读:346      评论:0      收藏:0      [点我收藏+]

bubuko.com,布布扣

解题思路:

       此题我们可以假设第一个的牌的位置,经过几次能回到原来的位置就可以啦!!即1回家时任一数字都回了家。

               定理1:当第一张牌(牌1)回到初始位置时,所有的牌都回到了初始位置。

               证明:设有一次操作,某牌在操作前处于位置r(1<=r<=2*N),那么,操作后,如果r原来是前一半的,显然r‘=r*2;    否则,r‘=(r-n)*2-1,即r‘=‘r*2-(N*2+1);

                      定理2:一定存在某次操作M,这次操作后,所有的牌都回到了初始位置。

代码:

#include<iostream>
using namespace std;
int main()
{
    int N,i=1,M;//i表示指定数的位置,假设判断第一个数
    while(cin>>N)
    {
        M=1;
        while(1)
        {
            if(i<=N)
                i*=2;//若该数小于等于N,则变换一次位置变为2*N
            else
                i=2*(i-N)-1;
            if(i==1)break;
            M++;
        }
        cout<<M<<endl;
    }
    return 0;
}

OJ练题之YT训练4

原文:http://www.cnblogs.com/hwh1239139516/p/3555730.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!