撲克牌的順子
http://zhedahht.blog.163.com/blog/static/25411174200951262930831/
題目:從撲克牌中隨機抽5張牌,判斷是不是一個順子,即這5張牌是不是連續(xù)的。2-10為數(shù)字本身,A為1,J為11,Q為12,K為13,而大小王可以看成任意數(shù)字。
思路一:
我們需要把撲克牌的背景抽象成計算機語言。不難想象,我們可以把5張牌看成由5個數(shù)字組成的數(shù)組。大小王是特殊的數(shù)字,我們不妨把它們都當(dāng)成0,這樣和其他撲克牌代表的數(shù)字就不重復(fù)了。
接下來我們來分析怎樣判斷5個數(shù)字是不是連續(xù)的。最直觀的是,我們把數(shù)組排序。但值得注意的是,由于0可以當(dāng)成任意數(shù)字,我們可以用0去補滿數(shù)組中的空缺。也就是排序之后的數(shù)組不是連續(xù)的,即相鄰的兩個數(shù)字相隔若干個數(shù)字,但如果我們有足夠的0可以補滿這兩個數(shù)字的空缺,這個數(shù)組實際上還是連續(xù)的。舉個例子,數(shù)組排序之后為{0,1,3,4,5}。在1和3之間空缺了一個2,剛好我們有一個0,也就是我們可以它當(dāng)成2去填補這個空缺。
于是我們需要做三件事情:把數(shù)組排序,統(tǒng)計數(shù)組中0的個數(shù),統(tǒng)計排序之后的數(shù)組相鄰數(shù)字之間的空缺總數(shù)。如果空缺的總數(shù)小于或者等于0的個數(shù),那么這個數(shù)組就是連續(xù)的;反之則不連續(xù)。最后,我們還需要注意的是,如果數(shù)組中的非0數(shù)字重復(fù)出現(xiàn),則該數(shù)組不是連續(xù)的。換成撲克牌的描述方式,就是如果一副牌里含有對子,則不可能是順子。
更好的思路二:
1)確認(rèn)5張牌中除了0,其余數(shù)字沒有重復(fù)的(可以用表統(tǒng)計的方法);
2) 滿足這樣的邏輯:(max,min分別代表5張牌中的除0以外的最大值最小值)
如果沒有0,則max-min=4,則為順子,否則不是
如果有一個0,則max-min=4或者3,則為順子,否則不是
如果有兩個0,則max-min=4或者3或者2,則為順子,否則不是
最大值和最小值在1)中就可以獲得,這樣就不用排序了
posted on 2011-07-12 20:33 simplyzhao 閱讀(643) 評論(0) 編輯 收藏 引用 所屬分類: M_面試題集錦