华为 OD 机试 E 卷:斗地主之顺子问题(Java、Python、JavaScript、C++ 和 C)
斗地主是中国一款非常受欢迎的纸牌游戏。在这个问题中,我们关注其中的一个牌型:顺子。顺子就是连续的几个牌组成的序列,比如 [3, 4, 5, 6, 7]。
我们要编写一个函数来判断给定的牌是否可以构成顺子。下面是如何用不同语言实现这个功能的代码示例,包括 Java、Python、JavaScript、C++ 和 C。
Java
import java.util.Arrays;
public class ShunziChecker {
public static boolean isShunzi(int[] cards) {
if (cards.length < 5) {
return false;
}
Arrays.sort(cards);
for (int i = 1; i < cards.length; i++) {
if (cards[i] != cards[i - 1] + 1) {
return false;
}
}
return true;
}
public static void main(String[] args) {
int[] cards = {3, 4, 5, 6, 7};
System.out.println(isShunzi(cards)); // true
}
}
Python
def is_shunzi(cards):
if len(cards) < 5:
return False
cards.sort()
for i in range(1, len(cards)):
if cards[i] != cards[i - 1] + 1:
return False
return True
cards = [3, 4, 5, 6, 7]
print(is_shunzi(cards)) # True
JavaScript
function isShunzi(cards) {
if (cards.length < 5) {
return false;
}
cards.sort((a, b) => a - b);
for (let i = 1; i < cards.length; i++) {
if (cards[i] !== cards[i - 1] + 1) {
return false;
}
}
return true;
}
const cards = [3, 4, 5, 6, 7];
console.log(isShunzi(cards)); // true
C++
#include <iostream>
#include <vector>
#include <algorithm>
bool isShunzi(std::vector<int> cards) {
if (cards.size() < 5) {
return false;
}
std::sort(cards.begin(), cards.end());
for (size_t i = 1; i < cards.size(); ++i) {
if (cards[i] != cards[i - 1] + 1) {
return false;
}
}
return true;
}
int main() {
std::vector<int> cards = {3, 4, 5, 6, 7};
std::cout << std::boolalpha << isShunzi(cards) << std::endl; // true
return 0;
}
C
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
int isShunzi(int* cards, int size) {
if (size < 5) {
return 0;
}
qsort(cards, size, sizeof(int), compare);
for (int i = 1; i < size; i++) {
if (cards[i] != cards[i - 1] + 1) {
return 0;
}
}
return 1;
}
int main() {
int cards[] = {3, 4, 5, 6, 7};
int size = sizeof(cards) / sizeof(cards[0]);
printf("%s\n", isShunzi(cards, size) ? "true" : "false");
return 0;
}
以上代码演示了怎样判断一组牌是否是顺子。要注意的是,根据题意,顺子的定义可能会变化,例如是否需要考虑大小王作为万能牌等,但这里的实现是最基础版本,仅用于演示基本逻辑。