华为校招上机笔试题:扑克牌大小比较算法解析(Python实现)

Owen
Owen
发布时间:2026-10-13| 3人浏览过
原创

本文详细解析华为校园招聘上机笔试题中的“扑克牌大小”问题。题目要求比较两手牌的大小,涉及单张、对子、顺子、三个、炸弹及对王等多种牌型。文章提供了完整的Python解题思路与代码,重点讲解如何判断牌型、处理特殊规则(如炸弹和对王优先级)以及输出较大牌或ERROR。适合准备华为校招及Python算法练习的开发者参考。

本文分享了华为校园招聘上机考试中的一道经典编程题目,供广大求职者参考学习。

题目描述与规则

[编程题] 扑克牌大小 时间限制:10秒 空间限制:131072K 扑克牌游戏是大家熟悉的娱乐项目,一副标准扑克牌共54张,包含从3到A的各4张,以及小王1张和大王1张。 牌面大小用以下字符或字符串表示(小写joker代表小王,大写JOKER代表大王): 3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER 输入格式为两手牌,中间用“-”连接,每手牌内的每张牌以空格分隔,且“-”两侧无空格。例如:4 4 4 4-joker JOKER 要求比较两手牌的大小,输出较大的那手牌;若无法比较(类型不匹配且非特殊牌型),则输出ERROR。

基本规则说明:

(1)每手牌只能是单张、对子、顺子(连续5张)、三个、炸弹(四张)或对王中的一种,不存在其他复杂组合。输入保证两手牌均合法,且顺子已按从小到大排序。 (2)除炸弹和对王外,其他牌型只能与相同类型的牌进行比较(如对子比对子,三个比三个),不允许拆牌比较(例如不能将对子拆成单张)。 (3)大小判定遵循常见规则:单张、对子、三个比较牌面数值;顺子比较最小牌的数值;炸弹大于所有非炸弹牌型,炸弹之间比较牌面数值;对王(joker JOKER)为最大牌型。 (4)输入的两手牌不会出现完全相等的情况。

解题关键点提示:

(1)除炸弹和对王外,其他牌型必须类型相同才能比较。 (2)题目已保证输入牌的合法性,无需额外校验输入格式。 (3)输入的顺子已按从小到大排列,无需再次排序。

输入描述:

输入两手牌,中间用“-”连接,每手牌内每张牌以空格分隔,例如:4 4 4 4-joker JOKER。

输出描述:

输出两手牌中较大的一手,不含连接符,牌面顺序不变,仍以空格分隔;若无法比较,则输出ERROR。

输入例子1:

4 4 4 4-joker JOKER

输出例子1:

joker JOKER '''

Python代码实现

''' 解题思路:细心分析 华为笔试题目通常逻辑清晰,无需过度复杂思考,关键在于仔细分析各种牌型及其比较规则,即可顺利解决。

''' 代码运行结果: 答案正确:恭喜!您提交的程序通过了所有的测试用例


def judge_token(cs):
 length = len(cs)
 if length == 1:
 return 'single'
 elif length == 3:
 return 'triple'
 elif length == 4:
 return 'bomb'
 elif length == 5:
 return 'seq'
 elif length == 2:
 if cs == ['joker', 'JOKER']:
  return 'j-bomb'
 else:
  return 'double'
 
card_dict = {'3': 1, '4': 2, '5': 3, '6': 4, '7': 5, '8': 6, '9': 7, '10': 8, 'J': 9, 'Q': 10, 'K': 11,
  'A': 12, '2': 13, 'joker': 14, 'JOKER': 15}
 
while True:
 try:
 cards = input().split('-')
 cards_1 = cards[0].split()
 cards_2 = cards[1].split()
 cards_1_token = judge_token(cards_1)
 cards_2_token = judge_token(cards_2)
 if cards_1_token != 'bomb' and cards_1_token != 'j-bomb' and cards_2_token != 'bomb' and cards_2_token != 'j-bomb':
  if cards_1_token == cards_2_token:
  if card_dict[cards_1[0]] > card_dict[cards_2[0]]:
   print(' '.join(cards_1))
  else:
   print(' '.join(cards_2))
  else:
  print('ERROR')
 elif (cards_1_token == 'bomb' or cards_1_token == 'j-bomb') and (cards_2_token != 'bomb' and cards_2_token != 'j-bomb'):
  print(' '.join(cards_1))
 elif (cards_1_token != 'bomb' and cards_1_token != 'j-bomb') and (cards_2_token == 'bomb' or cards_2_token == 'j-bomb'):
  print(' '.join(cards_2))
 elif cards_1_token == 'bomb' and cards_2_token == 'j-bomb':
  print(' '.join(cards_2))
 elif cards_1_token == 'j-bomb' and cards_2_token == 'bomb':
  print(' '.join(cards_1))
 else:
  if card_dict[cards_1[0]] > card_dict[cards_2[0]]:
  print(' '.join(cards_1))
  else:
  print(' '.join(cards_2))
 except:

以上就是本文的全部内容,希望对大家的学习有所帮助,也欢迎大家多多支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。