利用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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 十六個魔術方法
- 魔術方法
- 幽默:SQL Join形象解釋SQL
- 魔改了一下bootstrap-treeview元件,釋出個NPM包體驗一下bootView元件NPM
- 類的一些常用魔術方法
- PHP 魔術方法PHP
- Spark SQL的官網解釋SparkSQL
- OAuth 2.0 的一個簡單解釋OAuth
- intel em64的一個解釋Intel
- php 魔術方法 __callPHP
- PHP中什麼是魔術常量?有哪些魔術常量?(總結)PHP
- 拼多多筆試題(一):多多的魔術盒子筆試
- 記錄一個利用資料庫引擎格式化異常sql的思路資料庫SQL
- 技術名詞解釋
- 利用超市買牛奶來解釋web快取Web快取
- 記錄一個sqlSQL
- 技術說明 路由器是如何工作的呢? 一個簡單的解釋路由器
- #魔術方法(會話管理)會話
- PHP 魔術常量簡要PHP
- 利用docker部署一個wordpressDocker
- 魔術方法(一) __getattribute__ VS __getattr__ VS __getitem___
- 人工智慧下一個前沿:可解釋性人工智慧
- 8個SQL講解優化SQL優化
- 比特幣常用術語解釋比特幣
- SQL Server CPU 利用率毛刺的分析定位與解決SQLServer
- “魔獸”玩家小心啦! Lucky蠕蟲病毒利用魔獸地圖大肆傳播地圖
- 看到一個魔改執行緒池,面試素材加一!執行緒面試
- SQL Server資料庫檢視一個資料表各列的註釋SQLServer資料庫
- 類的兩個裝飾器classmethod、staticethod和內建魔術方法SSM
- Sql資料庫利用linkserver和 CT[CHANGE_TRACKING]實現釋出訂閱SQL資料庫Server
- 繼承關係和魔術方法繼承
- PHP 物件導向 (六)魔術方法PHP物件
- photoshop 魔術棒以及反選功能
- php中的魔術常量__FILE__PHP
- 利用ConcurrentHashMap來實現一個ConcurrentHashSetHashMap
- 一個反直覺的sqlSQL
- SQL優化之利用索引排序SQL優化索引排序
- 「分散式技術專題」剖析一個SQL的解析及執行過程分散式SQL
- 加加減減的奧祕——從數學到魔術的思考(一)