首页 > 学院 > 开发设计 > 正文

ZCMU-1177-循环序列

2019-11-14 11:01:35
字体:
来源:转载
供稿:网友

1177: 循环序列

Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 29  Solved: 17[Submit][Status][Web Board]

Description

有一个长度为2n的序列,编号为1,2,,…,n,n+1,…,2n-1,2n.经过一次变换后这个序列会变成n+1,1,n+2,2,n+3,3,n+4,4,…,2n,n.如果告诉你n,你能求出这个序列最少经过几次变换后才能变成原来的序列,若这个序列不是循环序列,既不能变成原来的序列那么输出-1.

Input

多组测试数据.每组数据的第一行包含一个正整数n(1<= n<=10000).

Output

对于每组测试数据输出最少需要经过几次变换或者-1.

Sample Input

201

Sample Output

202【解析】脑子笨的如我..一开始不懂这道题的意思..其实就是这样子的比如说1 2 3 4这样以中间为分界线把1移到3的后面,把2移到4的后面就变成了3 1 4 2,再把3移到4的后面把1移到2的后面变成4 3 2 1 再以此类推变成2 4 1 3,再来一次变回了1 2 3 4,总共4次。这个时候我们就要模拟1位置的变化了,我们可以慢慢的多试试就会发现其实就是(2*m)%(2*n+1)这里m代表的是1现在在的位置。
#include<iostream>#include<cstdio>#include<cstring>using namespace std;int main(){   int n,m,count1;   while(~scanf("%d",&n))   {       m=2%(2*n+1);       count1=1;       while(m!=1)       {           m=(m*2)%(2*n+1);           count1++;       }       PRintf("%d/n",count1);   }   return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表