当前位置: 首页 > 面试经验 >

2024华为OD机试真题 - 连续出牌数量 JAVA代码

优质
小牛编辑
72浏览
2024-08-14

2024华为OD机试真题 - 连续出牌数量 JAVA代码

2024华为OD机试真题,代码包含语言java 代码基本都有详细注释。

题目描述

有这么一款单人卡牌游戏,牌面由颜色和数字组成,颜色为红、黄、蓝、绿中的一种,数字为0-9中的一个。游戏开始时玩家从手牌

中选取一张卡牌打出,接下来如果玩家手中有和他上一次打出的手牌颜色或者数字相同的手牌,他可以继续将该手牌打出,直至手牌

打光或者没有符合条件可以继续打出的手牌。

现给定一副手牌,请找到最优的出牌策略,使打出的手牌最多。

输入描述

输入为两行

  • 第一行是每张手牌的数字,数字由空格分隔,

  • 第二行为对应的每张手牌的颜色,用r y b g这4个字母分别代表4种颜色,字母也由空格分隔。

手牌数量不超过10。

输出描述

输出一个数字,即最多能打出的手牌的数量。

用例

输入

1 4 3 4 5

r y b b r

输出

3

说明

如果打(1, r)-> (5, r),那么能打两张。

如果打(4,y) -> (4, b) -> (3, b),那么能打三张。

输入

1 2 3 4

r y b l

输出

1

说明

没有能够连续出牌的组合,只能在开始时打出一张手牌,故输出1

输入

1 2 3 4

r y b l

输出

1

说明

没有能够连续出牌的组合,只能在开始时打出一张手牌,故输出1

输入

1 2 3 4

r y b l

输出

1

说明

没有能够连续出牌的组合,只能在开始时打出一张手牌,故输出1

输入

1 2 3 4

r y b l

输出

1

说明

没有能够连续出牌的组合,只能在开始时打出一张手牌,故输出1

声明

上述内容部分整理自考生的真实反馈以及网络资源的搜集,我们始终尊重原作者的权益。如若发现任何内容侵犯了您的版权,敬请及时与我们取得联系,我们将立即进行删除处理。

此外,本材料后续的解析与代码部分均为我方原创思考与分析,凝聚了我们的心血与智慧。我们恳请各位尊重原创,切勿随意搬运或抄袭,共同维护良好的学术与创作环境。谢谢!

订阅后可看完整内容,试看真题如下:

华为OD机试真题 - 剩余银饰的重量 (D卷,100分)

111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

题目解析

首先,我们需要明确题目描述的游戏规则:玩家从手牌中选取一张卡牌打出,接下来如果手中有和上一次打出的手牌颜色或者数字相同的手牌,可以继续将该手牌打出,直到手牌打光或者没有符合条件可以继续打出的手牌为止。

  1. 理解并解析输入:题目输入分为两行,第一行是每张手牌的数字,第二行是对应的手牌颜色。我们需要将这两行数据解析为两个列表,分别代表手牌的数字和颜色。
  2. 初始化变量:我们需要一个变量来记录当前连续出牌的数量,以及一个变量来存储当前打出的手牌的颜色或数字。
  3. 遍历手牌:从第一张手牌开始,我们遍历整个手牌列表。对于每一张手牌,我们检查其颜色或数字是否与当前连续出牌的颜色或数字相同。如果相同,我们更新连续出牌的数量,并将当前手牌的颜色或数字设置为当前连续出牌的颜色或数字。如果不同,我们中断当前的连续出牌序列,并尝试从下一张手牌开始寻找新的连续出牌序列。
  4. 记录并更新最大出牌数:在遍历过程中,我们需要记录并更新能够打出的最大手牌数量。
  5. 输出结果:最后,我们输出能够打出的最大手牌数量。

需要注意的是,由于题目中手牌的颜色和数字是分开输入的,我们在检查连续出牌时,需要同时考虑颜色和数字两个因素。如果当前手牌的颜色或数字与上一次打出的手牌相同,我们就可以继续打出该手牌。

Java算法源码

import java.util.Arrays;

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

Scanner inputScanner = new Scanner(System.in);

int[] numbers = convertLineToIntArray(inputScanner.nextLine());

String[] hues = inputScanner.nextLine().split("\\s+"); // 使用正则表达式匹配一个或多个空白字符

System.out.println(determineLongestSequence(numbers, hues));

}

private static int[] convertLineToIntArray(String line) {

return Arrays.stream(line.split("\\s+")).mapToInt(Integer::parseInt).toArray();

}

static class PlayingCard {

int value;

char hue;

PlayingCard(int value, String color) {

this.value = value;

this.hue = color.charAt(0);

}

}

public static int determineLongestSequence(int[] values, String[] colors) {

int cardCount = values.length;

PlayingCard[] cardDeck = new PlayingCard[cardCount];

for (int i = 0; i < cardCount; i++) {

cardDeck[i] = new PlayingCard(values[i], colors[i]);

}

int[] maxLength = {0};

boolean[] selectedCards = new boolean[cardCount];

exploreSequences(cardDeck, selectedCards, null, 0, maxLength);

return maxLength[0];

}

public static void exploreSequences(PlayingCard[] cardDeck, boolean[] selectedCards, PlayingCard previousCard, int currentLength, int[] maxLength) {

maxLength[0] = Math.max(maxLength[0], currentLength);

for (int i = 0; i < cardDeck.length; i++) {

if (selectedCards[i]) {

continue;

}

PlayingCard currentCard = cardDeck[i];

if (previousCard != null && !(previousCard.value == currentCard.value || previousCard.hue == currentCard.hue)) {

continue;

}

selectedCards[i] = true;

exploreSequences(cardDeck, selectedCards, currentCard, currentLength + 1, maxLength);

selectedCards[i] = false;

}

}

}

#华为od##华为od题库##华为OD##华为OD机试真题##华为#
 类似资料: