利用SQL解釋一個魔術
昨天在星夜上看到一個撲克的魔術,很有意思。
首先描述一個這個魔術,從一副撲克牌中隨意抽取21張牌。然後讓人隨意選擇其中的一張牌,牢記後,將其放回到牌中,然後任意洗牌。
下面根據發牌的規則,將牌分成3堆,每堆7張。將每堆牌依次向對方展示,只需要對方確認他剛才記住的牌在其中的哪一堆中。
將3堆牌合成一堆,將包含目標牌的一堆牌放在其他兩堆牌的中間。
然後再次發牌,還是分成3堆。讓對方確認後,仍然將目標牌所在的那7張牌,放到另外兩堆牌的中間。
最後再次重複發牌,確認的過程,仍然將確認的目標牌堆放在中間。
下面神奇的時刻來到了,從這堆撲克牌中每拿一張,說一個字:“你要相信魔術,你的牌是”,說完這些話,下一張牌就是對方所記的那張牌。
看上去這個魔術確實很神奇,不過既然魔術可以這樣表演,就說明無論這張牌在哪個位置,只要按照這個規則,最後都一定會來到指定的地方。
下面用SQL來演示一下:
SQL> WITH A AS
2 (SELECT ROWNUM P FROM DUAL CONNECT BY LEVEL <= 21)
3 SELECT
4 7 + CEIL(
5 (7 + CEIL(
6 (7 + CEIL(P/3))
7 /3))
8 /3)
9 FROM A;
7+CEIL((7+CEIL((7+CEIL(P/3))/3))/3)
-----------------------------------
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
已選擇21行。
簡單描述一下,子查詢中的P表示這張牌的位置,分別是從1到21。而後將牌平均分成3份,於是這張牌的位置變為CEIL(P/3),在將這部分牌放到3份牌的中間,也就是說前面方式7張牌,因此結果要加上7。
將這個過程重複3次,就是這張牌的最終位置。
根據計算結果,可以看到無論這張牌在哪裡,最終都會到底第十一張的位置。這也就是這個魔術的奧秘所在。
不過SQL只是演示了結果,並沒有給出為什麼會出現這種結果,下面透過數學手段簡單分析一下:
由於第一次平均分的時候,這張牌的位置是任意的,所以這次平均分的意義不大,這次平均分的目的只是將目標牌的那一份放到中間的位置。
所以可以認為這張牌在中間位置第1到7的任何一個位置上。現在這張牌的位置就是7 + p,下面平均分成三份,然後將目標牌堆放到中間,這是這張牌的位置變為7 + (7+p)/3,最後在重複一次這個動作,結果變為:7 + (7 + (7+p)/3)/3。
通分後,結果變成(7*9 + 7*3 + 7 + p)/9,進一步簡化(91 + p)/9,最後變成了10 + (1+p)/9,而p的位置是1到7,也就是說無論取何值,(1+p)/9都不會大於1,所以最終結果是11。
最後,應該修改一下那句話:“你要相信數學,你的牌是”。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-557385/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PHP之十六個魔術方法詳解PHP
- PHP 中 16 個魔術方法詳解PHP
- python魔術方法詳解Python
- Python 中的魔術方法詳解Python
- Python中的魔術方法詳解Python
- PHP魔術方法和魔術常量介紹及使用PHP
- 利用SQL實現一個圖形概率問題SQL
- 類的一些常用魔術方法
- PHP 魔術方法PHP
- PHP魔術方法PHP
- 魔改了一下bootstrap-treeview元件,釋出個NPM包體驗一下bootView元件NPM
- PHP中的魔術方法和魔術常量簡介和使用PHP
- php 魔術方法 __callPHP
- PHP中什麼是魔術常量?有哪些魔術常量?(總結)PHP
- 利用sql_trace跟蹤一個指定會話的操作SQL會話
- 拼多多筆試題(一):多多的魔術盒子筆試
- PHP 魔術常量簡要PHP
- #魔術方法(會話管理)會話
- Python 魔術方法指南Python
- 利用THOMAS KATE理論,成功解決一個案例
- SQL SERVER DBCC命令解釋SQLServer
- 幽默:SQL Join形象解釋SQL
- Python魔術方法 __getattr__、__getattribute__使用詳解Python
- OAuth 2.0 的一個簡單解釋OAuth
- intel em64的一個解釋Intel
- 常見網際網路34個術語解釋
- 看到一個魔改執行緒池,面試素材加一!執行緒面試
- 我該如何向非技術人解釋SQL隱碼攻擊?SQL
- Python 魔術方法 - Magic MethodPython
- python中的魔術方法__Python
- 魔術方法(一) __getattribute__ VS __getattr__ VS __getitem___
- Oracle釋出一個SQL語句的處理過程OracleSQL
- Spark SQL的官網解釋SparkSQL
- SQL 注入技術詳解SQL
- TCP/IP模型的一個簡單解釋TCP模型
- 技術名詞解釋
- 技術說明 路由器是如何工作的呢? 一個簡單的解釋路由器
- 利用docker部署一個wordpressDocker