有这么一款单人卡牌游戏,牌面由颜色和数字组成,颜色为红、黄、蓝、绿中的一种,数字为0-9中的一个。游戏开始时玩家从手牌
中选取一张卡牌打出,接下来如果玩家手中有和他上一次打出的手牌颜色或者数字相同的手牌,他可以继续将该手牌打出,直至手牌
打光或者没有符合条件可以继续打出的手牌。
现给定一副手牌,请找到最优的出牌策略,使打出的手牌最多。
输入为两行
手牌数量不超过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
首先,我们需要明确题目描述的游戏规则:玩家从手牌中选取一张卡牌打出,接下来如果手中有和上一次打出的手牌颜色或者数字相同的手牌,可以继续将该手牌打出,直到手牌打光或者没有符合条件可以继续打出的手牌为止。
需要注意的是,由于题目中手牌的颜色和数字是分开输入的,我们在检查连续出牌时,需要同时考虑颜色和数字两个因素。如果当前手牌的颜色或数字与上一次打出的手牌相同,我们就可以继续打出该手牌。
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机试真题##华为#