題目:從撲克牌中隨機抽5張牌,判斷是不是乙個順子,即這5張牌是不是連續的。2-10
為數字本身,a為1,j為11,q為12,k為13,而大小王可以看成任意數字。
思路一:
我們需要把撲克牌的背景抽象成計算機語言。不難想象,我們可以把5張牌看成由5個數字
組成的陣列。大小王是特殊的數字,我們不妨把它們都當成0,這樣和其他撲克牌代表的數
字就不重複了。
接下來我們來分析怎樣判斷5個數字是不是連續的。最直觀的是,我們把陣列排序。但值得
注意的是,由於0可以當成任意數字,我們可以用0去補滿陣列中的空缺。也就是排序之後
的陣列不是連續的,即相鄰的兩個數字相隔若干個數字,但如果我們有足夠的0可以補滿這
兩個數字的空缺,這個陣列實際上還是連續的。舉個例子,陣列排序之後為。在1和3之間空缺了乙個2,剛好我們有乙個0,也就是我們可以它當成2去填補這個
空缺。
於是我們需要做三件事情:把陣列排序,統計陣列中0的個數,統計排序之後的陣列相鄰數
字之間的空缺總數。如果空缺的總數小於或者等於0的個數,那麼這個陣列就是連續的;反
之則不連續。最後,我們還需要注意的是,如果陣列中的非0數字重複出現,則該陣列不是
連續的。換成撲克牌的描述方式,就是如果一副牌裡含有對子,則不可能是順子。
更好的思路二:
1)確認5張牌中除了0,其餘數字沒有重複的(可以用表統計的方法);
2) 滿足這樣的邏輯:(max,min分別代表5張牌中的除0以外的最大值最小值)
如果沒有0,則max-min=4,則為順子,否則不是
如果有乙個0,則max-min=4或者3,則為順子,否則不是
如果有兩個0,則max-min=4或者3或者2,則為順子,否則不是
void checkcardsnumconcatenation(int * parray, int length)if(parray[index] < min)
}diff = max - min;
cout<
從撲克牌中隨機抽取5張牌,判斷是不是乙個順子。
從撲克牌中隨機抽取5張牌,判斷是不是乙個順子。一 演算法描述 從撲克牌中隨機抽取5張牌,判斷是不是乙個順子,即這5張牌是不是連續的2 10位數字本身,a為1,j為11,q為12,k為13,而大小王可以看成任意數字 bool sunzi int number,int length qsort numb...
如何判斷JS拿給我的是不是新機
1 看序列號。大部分的筆記本機身和電池上都應該貼有相同的序列號號,如果電池序列號和主機的序列號不一致,本本極有可能被更換過電池 另外,在採購國外品牌膝上型電腦產品時,機身序列號是否和電池及外包裝上的一致是檢驗該產品是否為水貨的乙個很重要的依據,要知國外的水貨筆記本是不能在國內享受質保的。2 看防盜鎖...
如何用最少的空間來比較兩章撲克牌的大小
有下面幾個要求 1 能夠比較兩張撲克牌是否為同一花色,2 比較兩張撲克牌的大小。請你設計乙個資料結構來儲存撲克牌的資訊。最直觀的想法就是用兩個字元型變數儲存一張撲克牌的資訊。有物件導向思想的話會想到用類儲存資訊,定義一些成員函式完成比較等操作。其實,可以只用6個位就能表示一張撲克牌,其中兩位表示花色...