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