🍭 大家好这里是KK爱Coding ,一枚热爱算法的程序员
✨ 本系列打算持续跟新华为近期的春秋招笔试题汇总~
💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导
👏 感谢大家的订阅➕ 和 喜欢💗
📧 KK这边最近正在收集近一年互联网各厂的笔试题汇总,如果有需要的小伙伴可以关注后私信一下 KK领取,会在飞书进行同步的跟新。
文章目录
- 🔮01.扑克牌消消乐
- 题目描述
- 输入格式
- 输出格式
- 样例输入
- 样例输出
- 数据范围
- 题解
- 参考代码
- ⚗️02.公司部门风险评估
- 题目描述
- 输入格式
- 输出格式
- 样例输入
- 样例输出
- 数据范围
- 题解
- 参考代码
- 🎀 03.城市应急疏散
- 题目描述
- 输入格式
- 输出格式
- 样例输入
- 样例输出
- 数据范围
- 题解
- 写在最后
- 📧 KK这边最近正在收集近一年互联网各厂的笔试题汇总,如果有需要的小伙伴可以关注后私信一下 KK领取,会在飞书进行同步的跟新。
本次华为的笔试不算难哦,虽然考试的时候题目长了点,但总体代码和思维量都不大
🔮01.扑克牌消消乐
题目描述
K小姐最近沉迷于一款扑克牌消除游戏。游戏规则如下:从一副扑克牌中随机抽取 n n n 张牌组成一个序列,如果有连续的 3 3 3 张相同牌号的卡牌,则这 3 3 3 张卡牌可以消除。消除后,剩余卡牌按照当前顺序重新合并成新的序列,继续寻找可以消除的卡牌组合,直到无法再消除为止。
需要注意的是,如果存在连续的 4 4 4 张相同牌号的卡牌,在消除后会剩余 1 1 1 张该牌号的卡牌。
现在,K小姐想知道最后剩余的卡牌序列是什么样的,你能帮助她吗?
输入格式
第一行包含一个正整数 n n n( 1 ≤ n ≤ 52 1 \leq n \leq 52 1≤n≤52),表示抽取的卡牌数量。
第二行包含 n n n 个以空格分隔的字符串,表示抽取的卡牌序列,卡牌号仅包含 2 2 2- 10 10 10, A A A, J J J, Q Q Q, K K K。
输出格式
输出一个字符串,表示最终剩余的卡牌号序列,卡牌号之间以空格分隔。如果最终没有卡牌剩余,则输出 0 0 0。
样例输入
10 3 A 2 2 2 A A 7 7 7
样例输出
3
数据范围
- 1 ≤ n ≤ 52 1 \leq n \leq 52 1≤n≤52
- 卡牌号仅包含 2 2 2- 10 10 10, A A A, J J J, Q Q Q, K K K。
题解
这是一道模拟题,可以使用栈来模拟卡牌的消除过程。具体步骤如下:
- 将输入的卡牌序列依次放入栈中。
- 在放入每张卡牌时,检查栈顶是否存在与当前卡牌相同的牌号。
- 如果存在,则统计相同牌号的数量,直到栈顶的卡牌牌号不同或栈为空为止。
- 如果相同牌号的数量等于 3 3 3,则将这 3 3 3 张卡牌从栈中弹出。
- 重复步骤 2 2 2,直到所有卡牌都放入栈中。
- 最后,将栈中剩余的卡牌依次输出,如果栈为空,则输出 0 0 0。
时间复杂度为 O ( n ) O(n) O(n),空间复杂度为 O ( n ) O(n) O(n)。
参考代码
- Python
n = int(input()) cards = input().split() stack = [] for card in cards: stack.append(card) while len(stack) >= 3 and stack[-1] == stack[-2] == stack[-3]: for _ in range(3): stack.pop() if not stack: print(0) else: print(' '.join(stack))
- Java
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); String[] cards = new String[n]; for (int i = 0; i = 3 && stack.get(size - 1).equals(stack.get(size - 2)) && stack.get(size - 2).equals(stack.get(size - 3))) { for (int i = 0; i
- Cpp
#include #include #include using namespace std; int main() { int n; cin >> n; vector cards(n); for (int i = 0; i > cards[i]; } vector stack; for (string card : cards) { stack.push_back(card); int size = stack.size(); while (size >= 3 && stack[size - 1] == stack[size - 2] && stack[size - 2] == stack[size - 3]) { for (int i = 0; i m >> n; unordered_set roots; for (int i = 0; i > dept >> parent >> level >> num; if (parent == "*") { roots.insert(dept); } else { graph[parent].push_back(dept); } if (level == 0) { risks1[dept] = num; } else { risks2[dept] = num; } } int cnt = 0; for (const string& root : roots) { auto risks = dfs(root); if (5 * risks.first + 2 * risks.second > m) { cnt++; } } cout public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[][] dist = new int[n][n]; for (int i = 0; i
- Cpp
#include #include #include #include using namespace std; const int INF = 0x3f3f3f3f; int main() { int n; cin >> n; vector dist(n, vector(n)); for (int i = 0; i > dist[i][j]; if (dist[i][j] == -1) { dist[i][j] = INF; } } } vector cap(n); for (int i = 0; i > cap[i]; } int x, p; cin >> x >> p; vector d(n, INF); d[x] = 0; priority_queue q; q.emplace(0, x); while (!q.empty()) { auto [du, u] = q.top(); q.pop(); if (du > d[u]) { continue; } for (int v = 0; v = p) { break; } ans.push_back(i); total_cap += ci; } for (int i = 0; i
- Cpp
- Cpp
- Java
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。
还没有评论,来说两句吧...