華為OD機試真題——斗地主之順子(2025B卷:100分)Java/python/JavaScript/C/C++/GO最佳實現

在這里插入圖片描述

2025 B卷 100分 題型

本專欄內全部題目均提供Java、python、JavaScript、C、C++、GO六種語言的最佳實現方式;
并且每種語言均涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、3個測試用例以及綜合分析;
本文收錄于專欄:《2025華為OD真題目錄+全流程解析+備考攻略+經驗分享》

華為OD機試真題《斗地主之順子》:


文章快捷目錄

題目描述及說明

Java

python

JavaScript

C

GO

更多內容


題目名稱:斗地主之順子


  1. 知識點:字符串處理、排序算法、邏輯判斷
  2. 時間限制:1秒
  3. 空間限制:256MB
  4. 限定語言:不限

題目描述

在斗地主撲克牌游戲中,撲克牌由小到大的順序為:3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, A, 2。玩家可以出的牌型包括單張、對子、順子、飛機、炸彈等。
順子的規則

  1. 由至少5張連續遞增的牌組成(例如:{3,4,5,6,7}或{3,4,5,…,K,A})。
  2. 不能包含2(如{J,Q,K,A,2}無效)。
  3. 不允許非連續或重復牌(如{3,4,5,6,8}無效)。

輸入
13張合法撲克牌(空格隔開,不含大小王),例如:2 9 J 2 3 4 K A 7 9 A 5 6

輸出

  • 若有順子,按首個牌大小升序逐行輸出(如3 4 5 6 7)。
  • 多個順子時分行輸出(如示例2)。
  • 無順子則輸出No

示例

  • 輸入:2 9 J 2 3 4 K A 7 9 A 5 6 → 輸出:3 4 5 6 7
  • 輸入:2 9 J 10 3 4 K A 7 Q A 5 6 → 輸出:3 4 5 6 79 10 J Q K A

Java

問題分析

我們需要在斗地主游戲中找出所有可能的順子牌型。順子由至少5張連續遞增的牌組成,不能包含2,且牌不可重復。輸入為13張牌,需輸出所有可能的順子,按首個牌的大小升序排列。


解題思路

  1. 數據預處理

    • 將牌面轉換為數值,過濾掉2。
    • 去重并排序,得到有序的數值列表。
  2. 尋找連續序列

    • 遍歷排序后的數值列表,找出所有長度≥5的連續遞增序列。
  3. 結果轉換與輸出

    • 將數值序列轉換回牌面,按起始牌升序輸出。

代碼實現

import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String[] cards = scanner.nextLine().split(" ");// 建立牌面到數值的映射(3→0,A→11,2→12但會被過濾)Map<String, Integer> cardToValue = new HashMap<>();String[] order = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};for (int i = 0; i < order.length; i++) {cardToValue.put(order[i], i);}// 過濾掉2,并轉換為不重復的數值集合Set<Integer> valueSet = new TreeSet<>();for (String card : cards) {if (cardToValue.containsKey(card)) { // 忽略2valueSet.add(cardToValue.get(card));}}List<Integer> sortedValues = new ArrayList<>(valueSet);if (sortedValues.size() < 5) { // 無足夠牌形成順子System.out.println("No");return;}List<List<Integer>> sequences = new ArrayList<>();int start = 0; // 當前連續序列的起始索引// 遍歷數值列表,尋找連續序列for (int i = 1; i <= sortedValues.size(); i++) {if (i < sortedValues.size() && sortedValues.get(i) == sortedValues.get(i-1) + 1) {continue; // 繼續連續序列} else {int length = i - start;if (length >= 5) {List<Integer> sub = sortedValues.subList(start, i); // 截取連續序列sequences.add(new ArrayList<>(sub)); // 避免引用問題}start = i; // 重置起始索引}}// 轉換為牌面并輸出List<List<String>> result = new ArrayList<>();for (List<Integer> seq : sequences) {List<String> sequence = new ArrayList<>();for (int val : seq) {sequence.add(order[val]);}result.add(sequence);}if (result.isEmpty()) {System.out.println("No");} else {for (List<String> seq : result) {System.out.println(String.join(" ", seq));}}}
}

代碼詳細解析

  1. 輸入處理

    • 使用Scanner讀取輸入并分割為牌面數組。
  2. 牌面到數值的映射

    • 使用數組order定義牌面順序,建立cardToValue映射。
  3. 過濾與去重

    • 遍歷輸入的牌,過濾掉2,并將牌面轉換為數值存入TreeSet(自動排序并去重)。
  4. 尋找連續序列

    • 遍歷排序后的數值列表,通過比較相鄰數值判斷是否連續。
    • 發現不連續時,若當前序列長度≥5,則記錄該序列。
  5. 結果轉換與輸出

    • 將數值序列轉換為對應的牌面,按順序輸出。

示例測試

示例1
輸入:2 9 J 2 3 4 K A 7 9 A 5 6
輸出:

3 4 5 6 7

解析:數值序列0,1,2,3,4對應牌面3-7。

示例2
輸入:2 9 J 10 3 4 K A 7 Q A 5 6
輸出:

3 4 5 6 7  
9 10 J Q K A

解析:兩個連續序列0-4(3-7)和6-11(9-A)。

示例3
輸入:2 2 2 2 2 2 2 2 2 2 2 2 2
輸出:
No
解析:所有牌都是2,無法組成順子。


綜合分析

  1. 時間復雜度

    • 預處理:O(n),其中n為輸入牌數。
    • 尋找連續序列:O(m),m為去重后的牌數。
  2. 空間復雜度

    • 使用TreeSet和列表存儲數值,空間復雜度為O(m)。
  3. 正確性

    • 通過去重和排序確保每個順子唯一且連續,遍歷過程準確捕捉所有可能序列。
  4. 適用性

    • 處理任意合法輸入,包括重復牌和復雜分布,確保結果正確。

python

問題分析

我們需要在斗地主游戲中找出所有可能的順子牌型。順子由至少5張連續遞增的牌組成,不能包含2,且牌不可重復。輸入為13張牌,需輸出所有可能的順子,按首個牌的大小升序排列。


解題思路

  1. 數據預處理

    • 將牌面轉換為數值,過濾掉2。
    • 去重并排序,得到有序的數值列表。
  2. 尋找連續序列

    • 遍歷排序后的數值列表,找出所有長度≥5的連續遞增序列。
  3. 結果轉換與輸出

    • 將數值序列轉換回牌面,按起始牌升序輸出。

代碼實現

def main():# 讀取輸入并分割成牌列表input_cards = input().split()# 定義牌面順序映射:3->0, 4->1,..., A->11,2被過濾card_order = ["3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"]card_value = {card: idx for idx, card in enumerate(card_order)}# 過濾2并將牌轉換為數值,去重后排序values = []seen = set()for card in input_cards:if card in card_value:  # 過濾掉2val = card_value[card]if val not in seen:seen.add(val)values.append(val)values.sort()if len(values) < 5:print("No")return# 尋找所有連續序列sequences = 

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/907340.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/907340.shtml
英文地址,請注明出處:http://en.pswp.cn/news/907340.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Qt找不到windows API報錯:error: LNK2019: 無法解析的外部符號 __imp_OpenClipboard

筆者在開發中出現的bug完整報錯如下&#xff1a; spcm_ostools_win.obj:-1: error: LNK2019: 無法解析的外部符號 __imp_OpenClipboard&#xff0c;函數 "void __cdecl spcmdrv::vCopyToClipboard(char const *,unsigned __int64)" (?vCopyToClipboardspcmdrvYAXPE…

4.8.4 利用Spark SQL實現分組排行榜

在本次實戰中&#xff0c;我們的目標是利用Spark SQL實現分組排行榜&#xff0c;特別是計算每個學生分數最高的前3個成績。任務的原始數據由一組學生成績組成&#xff0c;每個學生可能有多個成績記錄。我們首先將這些數據讀入Spark DataFrame&#xff0c;然后按學生姓名分組&am…

[PyMySQL]

掌握pymysql對數據庫實現增刪改查數據庫工具類封裝,數據庫操作應用場景數據庫操作應用場景 校驗測試數據 : 刪除員工 :構造測試數據 : 測試數據使用一次就失效,不能重復使用 : 添加員工(is_delete)測試數據在展開測試前無法確定是否存在 : 查詢,修改,刪除員工操作步驟:!~~~~~~~…

cs224w課程學習筆記-第12課

cs224w課程學習筆記-第12課 知識圖譜問答 前言一、問答類型分類二、路徑查詢(Path queries)2.1 直觀查詢方法2.2 TransE 擴展2.3 TransE 能力分析 三、連詞查詢(conjunctive queries)3.1 Query2box 原理1)、投影2)、交集查詢&#xff08;AND 操作)3)、聯合查詢&#xff08;OR 操…

AI任務相關解決方案2-基于WOA-CNN-BIGRU-Transformer模型解決光纖通信中的非線性問題

文章目錄 1. 項目背景與研究意義1.1 光纖通信中的非線性問題1.2 神經網絡在光纖非線性補償中的應用現狀 2. 現有模型 CNN-BIGRU-attention 分析2.1 模型架構與工作原理2.2 模型性能評估與局限性 3. 新模型優化方案3.1 WOA算法原理與優勢3.2 WOA-CNN-BIGRU-MHA模型構建3.3 WOA-C…

HTTP Accept簡介

一、HTTP Accept是什么 HTTP協議是一個客戶端和服務器之間進行通信的標準協議&#xff0c;它定義了發送請求和響應的格式。而HTTP Accept是HTTP協議中的一個HTTP頭部&#xff0c;用于告訴服務器請求方所期望的響應格式。這些格式可以是媒體類型、字符集、語言等信息。 HTTP A…

39-居住證管理系統(小程序)

技術棧: springBootVueMysqlUni-app 功能點: 群眾端 警方端 管理員端 群眾端: 1.首頁: 輪播圖展示、公告信息列表 2.公告欄: 公告查看及評論 3.我的: 聯系我們: 可在線咨詢管理員問題 實時回復 居住證登記申請 回執單查看 領證信息查看 4.個人中心: 個人信息查看及修改…

鴻蒙OSUniApp 開發的滑動圖片墻組件#三方框架 #Uniapp

UniApp 開發的滑動圖片墻組件 前言 在移動應用中&#xff0c;圖片墻是一種極具視覺沖擊力的內容展示方式&#xff0c;廣泛應用于相冊、商品展示、社交分享等場景。一個優秀的滑動圖片墻組件不僅要支持流暢的滑動瀏覽&#xff0c;還要兼容不同設備的分辨率和性能&#xff0c;尤…

碰一碰系統源碼搭建==saas系統

搭建“碰一碰”系統&#xff08;通常指基于NFC或藍牙的短距離交互功能&#xff09;的源碼實現&#xff0c;需結合具體技術棧和功能需求。以下是關鍵步驟和示例代碼&#xff1a; 技術選型 NFC模式&#xff1a;適用于Android/iOS設備的近場通信&#xff0c;需處理NDEF協議。藍牙…

自動駕駛決策規劃框架詳解:從理論到實踐

歡迎來到《自動駕駛決策規劃框架詳解:從理論到實踐》的第二章。在本章中,我們將深入探討自動駕駛系統中至關重要的“大腦”——決策規劃模塊。我們將從基本概念入手,逐步解析主流的決策規劃框架,包括經典的路徑速度解耦方法、工業界廣泛應用的Apollo Planning框架、應對復雜…

服務器定時任務查看和編輯

在 Ubuntu 系統中&#xff0c;查看當前系統中已開啟的定時任務主要有以下幾種方式&#xff0c;分別針對不同類型的定時任務管理方式&#xff08;如 crontab、systemd timer 等&#xff09;&#xff1a; 查看服務器定時任務 一、查看用戶級別的 Crontab 任務 每個用戶都可以配…

小白的進階之路系列之四----人工智能從初步到精通pytorch自定義數據集下

本篇涵蓋的內容 在之前的文章中,我們已經討論了如何獲取數據,轉換數據以及如何準備自定義數據集,本篇文章將涵蓋更加深入的問題,希望通過詳細的代碼示例,幫助大家了解PyTorch自定義數據集是如何應對各種復雜實際情況中,數據處理的。 更加詳細的,我們將討論下面一些內容…

DeepSeek實戰:打造智能數據分析與可視化系統

DeepSeek實戰:打造智能數據分析與可視化系統 1. 數據智能時代:DeepSeek數據分析系統入門 在數據驅動的決策時代,智能數據分析系統正成為企業核心競爭力。本節將使用DeepSeek構建一個從數據清洗到可視化分析的全流程智能系統。 1.1 系統核心功能架構 class DataAnalysisS…

力扣100題---字母異位詞分組

1.字母異位詞分組 給你一個字符串數組&#xff0c;請你將 字母異位詞 組合在一起。可以按任意順序返回結果列表。 字母異位詞 是由重新排列源單詞的所有字母得到的一個新單詞。 方法一&#xff1a;字母排序 class Solution {public List<List<String>> groupAnagr…

使用子查詢在 SQL Server 中進行數據操作

在 SQL Server 中&#xff0c;子查詢&#xff08;Subquery&#xff09;是一種在查詢中嵌套另一個查詢的技術&#xff0c;可以用來執行復雜的查詢、過濾數據或進行數據計算。子查詢通常被用在 SELECT、INSERT、UPDATE 或 DELETE 語句中&#xff0c;可以幫助我們高效地解決問題。…

Flask集成pyotp生成動態口令

Python中的pyotp模塊是一個用于生成和驗證一次性密碼&#xff08;OTP&#xff09;的庫&#xff0c;支持基于時間&#xff08;TOTP&#xff09;和計數器&#xff08;HOTP&#xff09;的兩種主流算法。它遵循RFC 4226&#xff08;HOTP&#xff09;和RFC 6238&#xff08;TOTP&…

觸控精靈 ADB運行模式填寫電腦端IP教程

?ADB模式&#xff0c;如果你手機已經root則可以直接運行&#xff0c;無需安裝電腦端。 ?ADB模式&#xff0c;如果你手機沒有root&#xff0c;那你可以windows電腦下載【極限投屏】軟件&#xff0c;然后你的手機和電腦的網絡要同一個wifi&#xff0c;然后把你電腦的ip地址填寫…

【Python】 -- 趣味代碼 - 佩奇

文章目錄 文章目錄 00 佩奇程序設計框架1. 繪圖設置2. 繪制卡通人物的各個部分3. 主程序總結01 佩奇程序設計00 佩奇程序設計框架 這段代碼使用 turtle 模塊繪制了一個粉色的卡通人物圖像,主要功能包括繪制鼻子、頭、耳朵、眼睛、腮、嘴、身體、手、腳和尾巴等部分。代碼的主…

uniapp-商城-69-shop(2-商品列表,點擊商品展示,商品的詳情, vuex的使用,rich-text使用)

頁面中將我們的數據進行了羅列,對于單個數據的展示,還需要進行開發,這里使用了點擊商品后,進行彈窗展示。 同樣這里用一個組件來進行實現該彈窗的展示。 本文介紹了商品詳情彈窗的實現方案。主要采用Vuex進行狀態管理,通過幾個關鍵組件協同工作: 商品列表組件productItem…

C# Datatable篩選過濾各方式詳解

在C#中&#xff0c;DataTable提供了多種篩選過濾數據的方法&#xff0c;以下是常用的幾種方式及其特點&#xff1a; 1. ?Select方法篩選? 這是最基礎的篩選方式&#xff0c;支持類似SQL的表達式語法 // 單條件篩選 DataRow[] rows dt.Select("Age > 25");// …