广联达笔试 广联达秋招 广联达笔试题 0923

笔试时间:2025年9月23日

往年笔试合集:

2023春招秋招笔试合集

2024春招秋招笔试合集

第一题:斗地主出牌提示

斗地主牌型规则:发牌者将牌平均分给三个玩家,剩下3张牌放在桌面上作为底牌,为地主所有。牌的大小顺序从大到小为:2、A、K、Q、J、10、9、8、7、6、5、4、3。一副牌每张牌各4张。出牌时按座次顺时针出牌,每轮出牌必须按上家牌型出牌且大于上家牌面值。若出现两个玩家均放弃出牌,则由牌面最大的玩家开启新一轮出牌。

出牌规则:

  1. 顺子出牌,牌面值连续且大于4张以上,如4 5 6 7 8
  2. 炸弹出牌,同牌面值4张牌同时出牌,如K K K K,炸弹出牌可大于任意顺子牌型
  3. 牌面大小按2、A、K、Q、J、10、9、8、7、6、5、4、3递减。例如:单张牌型4 > 3;Q > J;顺子牌型5 6 7 8 9 > 3 4 5 6 7,炸弹牌型4 4 4 4 > 3 3 3 3 > 5 6 7 8 9
  4. 其他牌型规则不允许出牌

要求:按照当前玩家手中牌型,并结合当前出牌牌面值给出类似棋牌游戏中提示功能,要求提示返回玩家手中最小可出牌型组合,以列表表示。仅限当前牌面同牌型出牌或大于当前牌型的炸弹,如没有牌型可出则返回空。

输入描述

用14表示A,用15表示2,用11表示J,用12表示Q,用13表示K。10也可组成顺子。

  • 第一行为任一时刻玩家手中的牌型,未洗牌
  • 第二行为当前出牌轮次最新出牌牌型,用于决定玩家是否可出牌,仅限定顺子出牌

输出描述

需要输出当前玩家手中牌型最小的组合

样例输入

14,2,4,5,7,2,5,9,7,10,11,12,12,13,14,2,10,8,7

6,7,8,9,10

样例输出

[7, 8, 9, 10, 11]

参考题解

解题思路:

  1. 读取和整理手牌,统计每张牌的数量
  2. 读取上家出的牌,判断是否为炸弹
  3. 寻找能出的牌: 如果上家出炸弹,只能出更大的炸弹如果上家出顺子,优先找更大的顺子,找不到再考虑炸弹
  4. 找到最小的可出牌型组合

C++:

#include <bits/stdc++.h>
using namespace std;

vector<int> findBestPlay(vector<int>& cardCounts, vector<int>& uniqueSortedCards, vector<int>& lastPlay) {
    vector<int> bestPlay;
    bool isLastPlayBomb = lastPlay.size() == 4 && lastPlay[0] == lastPlay[3];
    
    vector<int> smallestStraight;
    if (!isLastPlayBomb) {
        int lastPlayLen = lastPlay.size();
        int lastPlayRank = lastPlay[0];
        for (int startCard : uniqueSortedCards) {
            if (startCard > lastPlayRank) {
                bool canFormStraight = true;
                for (int i = 0; i < lastPlayLen; i++) {
                    if (cardCounts[startCard + i] == 0) {
                        canFormStraight = false;
                        break;
                    }
                }
                if (canFormStraight) {
                    for (int i = 0; i < lastPlayLen; i++) {
                        smallestStraight.push_back(startCard + i);
                    }
                    break;
                }
            }
        }
    }
    
    vector<int> smallestBomb;
    int lastBombRank = isLastPlayBomb ? lastPlay[0] : 0;
    for (int rank = 3; rank <= 15; rank++) {
        if (rank > lastBombRank && cardCounts[rank] >= 4) {
            for (int i = 0; i < 4; i++) {
                smallestBomb.push_back(rank);
            }
            break;
        }
    }
    
    if (isLastPlayBomb) {
        if (!smallestBomb.empty()) {
            bestPlay = smallestBomb;
        }
    } else {
        if (!smallestStraight.empty()) {
            bestPlay = smallestStraight;
        } else if (!smallestBomb.empty()) {
            bestPlay = smallestBomb;
        }
    }
    
    return bestPlay;
}

int main() {
    string line;
    getline(cin, line);
    vector<int> cardCounts(18, 0);
    set<int> uniqueCardsSet;
    
    stringstream ss(line);
    string token;
    while (getline(ss, token, ',')) {
        int card = stoi(token);
        cardCounts[card]++;
        uniqueCardsSet.insert(card);
    }
    
    vector<int> uniqueSortedCards(uniqueCardsSet.begin(), uniqueCardsSet.end());
    sort(uniqueSortedCards.begin(), uniqueSortedCards.end());
    
    getline(cin, line);
    vector<int> lastPlay;
    stringstream ss2(line);
    while (getline(ss2, token, ',')) {
        lastPlay.push_back(stoi(token));
    }
    sort(lastPlay.begin(), lastPlay.end());
    
    vector<int> result = findBestPlay(cardCounts, uniqueSortedCards, lastPlay);
    
    cout << "[";
    for (int i = 0; i < result.size(); i++) {
        if (i > 0) cout << ",";
        cout << result[i];
    }
    cout << "]" << endl;
    
    return 0;
}

Java:

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String[] handStr = scanner.nextLine().split(",");
        int[] cardCounts = new int[18];
        Set<Integer> uniqueCardsSet = new HashSet<>();
        
        for (String s : handStr) {
            int card = Integer.parseInt(s.trim());
            cardCounts[card]++;
            uniqueCardsSet.add(card);
        }
        
        List<Integer> uniqueSortedCards = new ArrayList<>(uniqueCardsSet);
        Collections.sort(uniqueSortedCards);
        
        String[] lastPlayStr = scanner.nextLine().split(",");
        List<Integer> lastPlay = new ArrayList<>();
        for (String s : lastPlayStr) {
            lastPlay.add(Integer.parseInt(s.trim()));
        }
        Collections.sort(lastPlay);
        
        List<Integer> result = findBestPlay(cardCounts, uniqueSortedCards, lastPlay);
        System.out.println(result.toString().replace(" ", ""));
        scanner.close();
    }
    
    private static List<Integer> findBestPlay(int[] cardCounts, List<Integer> uniqueSortedCards, List<Integer> lastPlay) {
        List<Integer> bestPlay = new ArrayList<>()

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2025 春招笔试合集 文章被收录于专栏

2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南

全部评论

相关推荐

09-07 10:02
吉林大学 C++
某公司一颗钉子:推荐几个项目,可以写到简历的: web多人聊天:https://www.bilibili.com/video/BV1iYtrezEkA/ 多线程任务队列系统:https://www.bilibili.com/video/BV1XS9dYsE9d/ kv存储:https://www.bilibili.com/video/BV12oemzEEjQ/ RPC框架:https://www.bilibili.com/video/BV176Niz8ENj/
点赞 评论 收藏
分享
10-02 03:17
已编辑
西安交通大学 天线工程师
本人双非本,西交硕,通信工程专业,研究生期间主要做硬件天线方面,记录一下自己的秋招之旅,后续看情况可以更新一下面经相关一、目前有进展(附面经):①诺瓦星云:硬件工程师(西安)——简历初筛——待群面——9.12下午5点群面——群面已结束——待发第一轮面试——一面已结束(信息通知说是技术面,两位面试官,开局自我介绍,然后讲项目,后续主抓项目,问的很细,另一位会打断提问一些问题,然后会问一些情景类型的题,就是考察你的领导力和执行力ps:这部分不该是主管面才涉及的吗,基础知识没咋问,有位面试管特别和蔼,总体来说体验挺好的,聊的也挺多;反问环节:问了1、培养体系&nbsp;2、以我目前的能力&nbsp;去入手业务难不难。答:1、会有导师带等等&nbsp;2、不难&nbsp;&nbsp;其他的一些实在想不起来了,每次面的过程中都很兴奋,面完就累die)——测评——二面综合面:全程聊天,问了两个数电模电问题,不会忘了,不过无伤大雅,跟面试官深入探讨目前的就业环境,老有意思了,稍微讲了下项目。反问环节:问了我的培养方案,他的建议是我先去做硬件工程师的一些东西,把整个流程熟悉完之后,可以自己考虑去往领导层面发展还是技术层面;然后问了一下诺瓦的工作强度,说研发岗位除了有项目,其他时间都很轻松,然后还有双休,具体没有细聊。整体体验相当轻松愉快——已offer,10月谈薪②传音控股:天线工程师(上海)——待发测评——待做测评——测评结束——已约线下面试——一面被狠狠拷打内容大概围绕两个(1、给出一个完整的手机天线设计方案2、你项目里做的天线有哪些可以用到手机天线上大概率是寄了,没怎么准备手机天线相关的东西,好好复盘巩固了;反问:hc哪地方多,答:重庆,工资会比上海低,也比上海卷;反问培养体系,答:基本一对一&nbsp;等)③TCL:手机BU-天线工程师(惠州市)——简历筛选——待测评——测评已做——待ai面——ai面结束——一面结束(一面是两个人,一位技术面问简历项目,一位hr面问了一些日常问题:比如如何看待加班;工作地点有没有要求;反问了培养体系相关)——已oc④海能达——射频硬件工程师(深圳)——9.8号18.11投简历——一面结束(只问了项目相关,但我朋友被疯狂拷打基础知识,这个一面得看hr;反问了培养体系)——已通知二面先下面9.26——线下面:1、中文自我介绍+英文自我介绍(公司会外派比较看重这个),项目创新点、难点讲解,兴趣爱好等等。半小时后主管面:自我介绍中文,了解项目,其他几乎没问,反问了:业务相关;培养相关等,整体来说没啥了,主管面了上百了估计,也挺累,然后就速度很快。——第二天通知全部通过,测评:就是北森那些——已offer,线下面谈二、无消息;进展缓慢:1、vivo&nbsp;:硬件工程师(天线方向)(东莞)——测评已完成——9.12笔试待做——笔试已做——业务复筛进行中2、华为:ICTBG-硬件技术工程师-无线产品线-天线开发——综测笔试已做,等面试通知3、中兴:未来领军-硬件开发工程师(西安)——投递成功——转为正式秋招(进展太慢咧)——测评——换岗射频——待发笔试4、安克创新:射频工程师(深圳)——投递简历——测评已完成——已挂❌5、荣耀:天线打开工程师(西安、深圳)——投递中——待处理简历6、远峰科技:天线射频工程师(东莞)——投递7、航天恒星科技有限公司——天线设计师(西安)——9.8号已投递8、Realme真我——硬件工程师(深圳)——9.8号投递——待评估9、中兵通信科技股份有限公司——线下简历投递(武汉,半年北京)10、湖南云箭集团有限公司——微波源设计岗(湖南长沙)——已投11、科大讯飞——硬件开发工程师(合肥、深圳、苏州)——简历投递——测评已做12、影石——天线工程师(深圳)——已投递ps:人要有梦想13、比亚迪——已投,才知道笛子是要先过简历才能选职位,大意了都排到22W+了三、已挂:1、oppo:硬件类&nbsp;天线工程师(西安、上海)——综合待评估——已挂❌2、tp-link联洲:天线工程师(深圳)——初筛、流程中——进人才库❌3、韶音科技:天线工程师(深圳)——简历初筛——简历挂❌4、小米:天线工程师-手机(深圳)——投递简历——测评完毕——笔试待做——笔试做完——流程终止挂简历(海测海笔)❌祝各位秋招顺利
我的秋招日记
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务