題目描述
2023年是雲南中醫學院的百年校慶,於是學生會的同學們搞了乙個連續猜謎活動:共有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是多少的時候,可以直接得出答案呢?
輸入多組測試資料.每組資料的第一行包含乙個正整數n(1<= n<=10000).
輸出每組資料輸出一行整數表示最少需要經過幾次移動能變回原序列,若不能,則輸出"-1"
樣例輸入
複製樣例資料316
樣例輸出310
講道理乍一看這題以為超級困難,實際上就是一道模擬題。根據題目的意思,每次對2n數列進行一定的操作,問什麼時候可以變回原來數列,首先把一些情況寫出來
n=2時
1 2 3 4
3 1 4 2
4 3 2 1
2 4 1 3
1 2 3 4
n=4時
1 2 3 4 5 6 7 8
5 1 6 2 7 3 4 8
7 5 3 1 8 6 4 2
8 7 6 5 4 3 2 1
4 8 3 7 2 6 1 5
2 4 6 8 1 3 5 7
1 2 3 4 5 6 7 8
n=5時
1 2 3 4 5 6 7 8 9 10
6 1 7 2 8 3 9 4 10 5
3 6 9 1 4 7 10 2 5 8
7 3 10 6 2 9 5 1 8 4
9 7 5 3 1 10 8 6 4 2
10 9 8 7 6 5 4 3 2 1
5 10 4 9 3 8 2 7 1 6
8 5 2 10 7 4 1 9 6 3
4 8 1 5 9 2 6 10 3 4
2 4 6 8 10 1 3 5 7 9
1 2 3 4 5 6 7 8 9 10
不難發現,每一位數字都是在做重複的變化,數字所在位置乘以二,如果超出了2n就減去2n+1,一直重複這個操作直到回到原位置為止,不難發現所有情況都是有解的,直接忽略輸出-1就好,**也就出來了
#include#includeusing namespace std;
int main()
while(t!=1);
cout<}
return 0;
}
過分的謎題
原題鏈結 時間限制 1 sec 記憶體限制 128 mb 提交 364 解決 158 提交 狀態 命題人 外部匯入 題目描述 2060年是雲南中醫學院的百年校慶,於是學生會的同學們搞了乙個連續猜謎活動 共有10個謎題,現在告訴所有人第乙個謎題,每個謎題的答案就是下乙個謎題的線索.成功破解最後乙個謎題...
過分的謎題
2060年是雲南中醫學院的百年校慶,於是學生會的同學們搞了乙個連續猜謎活動 共有10個謎題,現在告訴所有人第乙個謎題,每個謎題的答案就是下乙個謎題的線索 成功破解最後乙個謎題後,答案就是指向獎勵的線索 在所有同學們的努力下,全校同學們獲得了最後乙個謎題,這個謎題有幾十張紙,上面全是密密麻麻的數字以及...
備戰省賽 過分的謎題
題目描述 2060年是雲南中醫學院的百年校慶,於是學生會的同學們搞了乙個連續猜謎活動 共有10個謎題,現在告訴所有人第乙個謎題,每個謎題的答案就是下乙個謎題的線索.成功破解最後乙個謎題後,答案就是指向獎勵的線索 在所有同學們的努力下,全校同學們獲得了最後乙個謎題,這個謎題有幾十張紙,上面全是密密麻麻...