青蛙換邊遊戲
規則
問題
- 當青蛙變成 80 隻時, 那總共需要跳幾步才可以完成換邊?
- 當青蛙變成 91 隻時, 那總共需要跳幾步才可以完成換邊?
解答
簡單整理結論
青蛙數奇數和偶數的規則不太相同- 第一步驟往下與最後步驟往上, 會有鏡射排列對應的結果, Exp. 0:111-000 ⇒ 15:000-111 , 1:11-1000 ⇒ 14:0001-11
- 青蛙數偶數時, 正中間步驟與其他步驟都無鏡射排列對應關係, 但本身數列前後會有鏡射狀況, Exp. 1010-0101
所以觀測結果分成青蛙數奇數一組,偶數另一組.
青蛙數 | 需要步驟數 |
---|---|
1 | 3 |
2 | 8 |
3 | 15 |
4 | 24 |
5 | 35 |
6 | 48 |
發現與推論
- 在偶數組發現可以 2 * 4 ⇒ 8 , 4 * 6 ⇒ 24 , 6 * 8 ⇒ 48 所以推論
- 8 * 10 ⇒ 80
- 10 * 12 ⇒ 120
- 在奇數組兒子發現可以 (1+1)*(1+1)-1 ⇒ 3 , (3+1)*(3+1)-1 ⇒ 15 , (5+1)*(5+1)-1 ⇒ 35 所以推論
- (7+1)*(7+1)-1 ⇒ 63
- (9+1)*(9+1)-1 ⇒ 99
- 當不分奇數偶數組直接觀察, 發現差異數有規則性 — 蔡宗融 2012-11-27 01:02
青蛙數 | 需要步驟數 | 差異數 |
---|---|---|
1 | 3 | - |
2 | 8 | 5 |
3 | 15 | 7 |
4 | 24 | 9 |
5 | 35 | 11 |
6 | 48 | 13 |
- 所以之前推論的奇數 (n+1)*(n+1)-1 與偶數 n*n(+2) 其實是可以透過正方形數來解釋為何長得這樣子的原因, 而且兩個推論公式都可直接使用, 並不需區分出奇數與偶數.
給程式的原則
- 所歸納給程式的原則如下:
- Steps Rule :
- n 奇數 : Steps = (n+1)*(n+1)-1
- n 偶數 : Steps = n*(n+2)
- Move Rule :
- 出現 10- ⇒ -01
- 出現 -10 ⇒ 01-
- 出現 1-0 時, m:-的位置 if(m⇐n+1) then ⇒ -10 else ⇒ 10-
- Stop Rule :
- n 奇數 : 出現與上一個排列是 Mirror 就結束(pop stack 的 mirror 步驟)
- n 偶數 : 出現兩邊對稱 Exp. 1010-0101
產生的程式碼
產生的結果
- 4 隻青蛙
- 5 隻青蛙
- 8 隻青蛙
- 9 隻青蛙
- 10 隻青蛙
- 11 隻青蛙
- 12 隻青蛙
載入中 ...
4 隻青蛙
[jonathan@c2q-q9400 ~]$ perl math02.pl 4 It should move [24] steps! 0: [1111-0000] 1: [111-10000] 2: [11101-000] 3: [111010-00] 4: [1110-0100] 5: [11-010100] 6: [1-1010100] 7: [101-10100] 8: [10101-100] 9: [1010101-0] 10: [10101010-] 11: [101010-01] 12: [1010-0101] 13: [10-010101] 14: [-01010101] 15: [0-1010101] 16: [001-10101] 17: [00101-101] 18: [0010101-1] 19: [001010-11] 20: [0010-0111] 21: [00-010111] 22: [000-10111] 23: [00001-111] 24: [0000-1111]
結論
- 確定一開始的發現與推論是正確的, 所以需要的步驟數可以有兩種公式表示出來:
- Steps = (n+1)*(n+1)-1
- Steps = n*(n+2)
- 當青蛙變成 80 隻時, 那總共需要跳幾步才可以完成換邊?
- 答案是 (80+1)*(80+1)-1=81*81-1=6560
- 答案是 80*(80+2)=80*82=6560
- 當青蛙變成 91 隻時, 那總共需要跳幾步才可以完成換邊?
- 答案是 (91+1)*(91+1)-1=92*92-1=8463
- 答案是 91*(91+2)=91*93=8463