您的位置:首页 > 其它

ZCMU-1177-循环序列

2017-02-04 15:36 323 查看

1177: 循环序列

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 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

20
1

Sample Output

20
2
【解析】
脑子笨的如我..一开始不懂这道题的意思..其实就是这样子的比如说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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: