zcmu-1979
1979: 過分的謎題
Time Limit:?1 Sec??Memory Limit:?128 MBSubmit:?73??Solved:?43
[Submit][Status][Web Board]
Description
2060年是云南中醫(yī)學院的百年校慶,于是學生會的同學們搞了一個連續(xù)猜謎活動:共有10個謎題,現(xiàn)在告訴所有人第一個謎題,每個謎題的答案就是下一個謎題的線索....成功破解最后一個謎題后,答案就是指向獎勵的線索
在所有同學們的努力下,全校同學們獲得了最后一個謎題,這個謎題有幾十張紙,上面全是密密麻麻的數(shù)字以及'.'
第一頁內(nèi)容如下:
1,2,3,4,5,6
4,1,5,2,6,3
2,4,6,1,3,5
1,2,3,4,5,6
———3
1,2,3,4....32
.............
.............
———10
有細心的同學發(fā)現(xiàn),這是對一組1-2n的序列進行如下移動:每次將前n個數(shù)字取出,按順序依次插入到位于n+1,n+2...2n的數(shù)字后面,最后的數(shù)字表示多少次移動后會變回原來的序列
第二頁內(nèi)容如下:
1,2,3,4....64
.............
.............
———?
1,2,3,4....140
.............
.............
———?
同學們發(fā)現(xiàn),越往后翻,這個序列的長度就越長,前面十幾二十個數(shù)字的序列同學們還可以一步一步模擬做出來,但是到后來幾千甚至上萬的長度,就沒有辦法計算了,甚至中間一步做錯,就步步都錯。
這個謎題真是太過分了!但是獎勵就在眼前,只要計算出所有答案,所有答案就是指引同學們獲得獎勵的線索,那么現(xiàn)在問題來了,同學們除了發(fā)現(xiàn)上面的n=最后那個數(shù)字/2之外,沒有辦法給你任何幫助,而作為一個計算機科學與技術(shù)專業(yè)的大佬,你自然就成為了同學們心目中拯救他們的英雄,所以你能不能寫一個程序,當你知道n是多少的時候,可以直接得出答案呢?
Input
多組測試數(shù)據(jù).每組數(shù)據(jù)的第一行包含一個正整數(shù)n(1<= n<=10000).
Output
每組數(shù)據(jù)輸出一行整數(shù)表示最少需要經(jīng)過幾次移動能變回原序列,若不能,則輸出"-1"
Sample Input
316Sample Output
310 解析:起先一眼以為是找規(guī)律,不如說是模擬題。寫一下幾個樣例,比較出來每個數(shù)字都是 有規(guī)律變化的。就比如1這個數(shù),總是先從0位置變到1,再3,再。。。最后回到原來的位置 0,那么我們就可以想到,對于其中任意的一個數(shù)我們可以找出它變化的規(guī)律就是這個數(shù)的 位置*2%(n+1),最后變到原先的位置看看它變化了多少次即所求結(jié)果。 代碼:#include<cstdio> #include<cstring> #include<algorithm> using namespace std;int main() {int n;while(~scanf("%d",&n)){int t=1;int x=2;n*=2;while(x!=1){x=(x*2)%(n+1);//printf("%d **\n",x);t++;}printf("%d\n",t);}return 0; }
總結(jié)
- 上一篇: Elasticsearch查询性能优化
- 下一篇: 女生学计算机未来出路,计算机真的已经烂大