劍指offer 061(撲克牌的順子)

2021-08-20 05:32:46 字數 2230 閱讀 8682

更多面試題:《劍指offer》目錄索引

題目描述

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

思路

首先撲克牌是由1~13組成的,在這裡的順子指的是5張牌是不是連續的,比如1,2,3,4,5就是連續的,因此我們可以將這五張牌進行排序,在去判斷是否是連續的

其次大王小王可以代替任何乙個數字,故此我們可以讓數字0代替大小王

這裡出現順子的情況有以下兩種:

本身就是順子,不需要0代替

需要0代替,此時需要0的個數大於中間差的個數,比如:[1, 0, 0, 5, 0 ];裡面有3個0,表示可以兩個數中間可以差3個連續的數,1 和 5 中間差的有2,3,4,滿足這個條件,因此序列[1,0,0,5,0]就是順子

需要注意的是當出現對子的時候不在是順子

**:

#include 

using

namespace

std;

//使用希爾排序對其進行排序

void shellsort(int* arr, size_t length)

}}bool iscontinuous(int* numbers, int length)

int cal = 0;//統計陣列中不是順序的,中間差的個數

for (int i = 0; i < length-1; ++i)

}if (count >= cal)

return

true;

return

false;

}// ********************測試**********************

void test(const

char* testname, int* numbers, int length, bool expected)

void test1()

; test("test1", numbers1, sizeof(numbers1) / sizeof(int), true);

}void test2()

; test("test2", numbers, sizeof(numbers) / sizeof(int), false);

}void test3()

; test("test3", numbers, sizeof(numbers) / sizeof(int), true);

}void test4()

; test("test4", numbers, sizeof(numbers) / sizeof(int), false);

}void test5()

; test("test5", numbers, sizeof(numbers) / sizeof(int), true);

}void test6()

; test("test6", numbers, sizeof(numbers) / sizeof(int), false);

}void test7()

; test("test7", numbers, sizeof(numbers) / sizeof(int), true);

}void test8()

; test("test8", numbers, sizeof(numbers) / sizeof(int), false);

}void test9()

; test("test9", numbers, sizeof(numbers) / sizeof(int), true);

}void test10()

; test("test10", numbers, sizeof(numbers) / sizeof(int), true);

}// 有對子

void test11()

; test("test11", numbers, sizeof(numbers) / sizeof(int), false);

}// 魯棒性測試

void test12()

int main(int argc, char* argv)

結果:

劍指offer 撲克牌順子

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

劍指offer 撲克牌順子

劍指offer 撲克牌順子.cpp 定義控制台應用程式的入口點。題目描述 輸入五個數字,0可以代表任何數,問這五個數字是否是乙個順子 思路 排序後計算非0的相鄰兩個數之間的距離 gap 然後與0 大小王 的數量進行比較,看是否小於這個count include stdafx.h include ve...

劍指offer 撲克牌順子

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