撲克牌的順子

2021-07-05 15:55:20 字數 908 閱讀 4720

題目:從撲克牌中隨機抽取5張牌,判斷是不是乙個順子,即這5張牌是不是連續的。2~10為數字本身,a為1,j為11,q為12,k為13,而大、小王可以看成任意數字。

方法:首先把陣列排序,再統計陣列中0的個數,最後統計排序之後的陣列中相鄰數字之間的空缺總數。如果空缺的總數小於或者等於0的個數,則這個陣列就是連續的,反之不連續。如果陣列中的非0數字重複出現,也是不連續的。

bool iscontinuous(int* numbers, int

length)

qsort(numbers, length, sizeof(int), compare);

int numberofzero = 0;

int numberofgap = 0;

// 統計陣列中0的個數

for (int i = 0; i < length && numbers[i] == 0; ++i)

//統計陣列中的間隔數目

int small = numberofzero;

int big = small + 1;

while (big < length)

numberofgap += numbers[big] - numbers[small] - 1;

small = big;

++big;

}return (numberofgap > numberofzero) ? false : true;

}int compare(const

void* arg1, const

void* arg2)

改進:使用長度為14的雜湊表,可以在o(n)時間排序。

測試用例

撲克牌順子

ll今天心情特別好,因為他去買了一副撲克牌,發現裡面居然有2個大王,2個小王 一副牌原本是54張 他隨機從中抽出了5張牌,想測測自己的手氣,看看能不能抽到順子,如果抽到的話,他決定去買體育彩票,嘿嘿!紅心a,黑桃3,小王,大王,方片5 oh my god 不是順子.ll不高興了,他想了想,決定大 小...

撲克牌順子

題目描述 ll今天心情特別好,因為他去買了一副撲克牌,發現裡面居然有2個大王,2個小王 一副牌原本是54張 他隨機從中抽出了5張牌,想測測自己的手氣,看看能不能抽到順子,如果抽到的話,他決定去買體育彩票,嘿嘿!紅心a,黑桃3,小王,大王,方片5 oh my god 不是順子 ll不高興了,他想了想,...

撲克牌順子

ll今天心情特別好,因為他去買了一副撲克牌,發現裡面居然有2個大王,2個小王 一副牌原本是54張 他隨機從中抽出了5張牌,想測測自己的手氣,看看能不能抽到順子,如果抽到的話,他決定去買體育彩票,嘿嘿!紅心a,黑桃3,小王,大王,方片5 oh my god 不是順子 ll不高興了,他想了想,決定大 小...