码迷,mamicode.com
首页 > 其他好文 > 详细

YT14-HDU-洗牌的规律

时间:2015-02-06 09:37:50      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:c++   iostream   namespace   编程   博客   

Problem Description

Eddy是个ACMer,他不仅喜欢做ACM题,而且对于纸牌也有一定的研究,他在无聊时研究发现,如果他有2N张牌,编号为1,2,3..n,n+1,..2n。这也是最初的牌的顺序。通过一次洗牌可以把牌的序列变为n+1,1,n+2,2,n+3,3,n+4,4..2n,n。那么可以证明,对于任意自然数N,都可以在经过M次洗牌后第一次重新得到初始的顺序。编程对于小于100000的自然数N,求出M的值。

Input

每行一个整数N

Output

输出与之对应的M

Sample Input

20
1

Sample Output

20
2


代码如下:

#include <iostream>
using namespace std;
int main()
{
    int n;
    int c = 1;
    int m;
    while (cin>>n)
    {
          m = 1;
          while(1)
          {
                  if (c <= n)
                  {
                        c = 2 * c;
                  }
                  else 
                  {
                       c = (c - n) * 2 - 1;
                  }
                  if ( c == 1) break;
                  m++;
          }
          cout<<m<<endl;
    }
    return 0;
}




YT14-HDU-洗牌的规律

标签:c++   iostream   namespace   编程   博客   

原文地址:http://blog.csdn.net/liuchang54/article/details/43538387

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!