字节跳动--雀魂启动
小包最近迷上了一款叫做雀魂的麻将游戏,但是这个游戏规则太复杂,小包玩了几个月了还是输多赢少。
于是生气的小包根据游戏简化了一下规则发明了一种新的麻将,只留下一种花色,并且去除了一些特殊和牌方式(例如七对子等),具体的规则如下:
- 总共有36张牌,每张牌是1~9。每个数字4张牌。
- 你手里有其中的14张牌,如果这14张牌满足如下条件,即算作和牌
- 14张牌中有2张相同数字的牌,称为雀头。
- 除去上述2张牌,剩下12张牌可以组成4个顺子或刻子。顺子的意思是递增的连续3个数字牌(例如234,567等),刻子的意思是相同数字的3个数字牌(例如111,777)
现在,小包从36张牌中抽取了13张牌,他想知道在剩下的23张牌中,再取一张牌,取到哪几种数字牌可以和牌。
输入描述:
输入只有一行,包含13个数字,用空格分隔,每个数字在1~9之间,数据保证同种数字最多出现4次。
输出描述:
输出同样是一行,包含1个或以上的数字。代表他再取到哪些牌可以和牌。若满足条件的有多种牌,请按从小到大的顺序输出。若没有满足条件的牌,请输出一个数字0。
示例1:
输入:1 1 1 2 2 2 5 5 5 6 6 6 9
输出:9
说明:可以组成1,2,6,7的4个刻子和9的雀头
示例2:
输入:1 1 1 1 2 2 3 3 5 6 7 8 9
输出:4 7
说明:用1做雀头,组123,123,567或456,789的四个顺子
示例3:
输入:1 1 1 2 2 2 3 3 3 5 7 7 9
输出:0
说明:来任何牌都无法和牌
import java.util.*;
public class Main {public static void main(String[] args) {mahjong();}public static void mahjong() {Scanner scanner = new Scanner(System.in);int[] list = new int[9];for (int i = 0; i < 13; i++) {list[scanner.nextInt() - 1]++;}ArrayList<Integer> result = new ArrayList<>();for (int i = 0; i < 9; i++) {if (list[i] == 4) {continue;}int[] tmp = Arrays.copyOf(list, 9);tmp[i]++;if (isHe(tmp)) {result.add(i + 1);}}if (result.size() == 0) {System.out.println(0);}for (int i = 0; i < result.size(); i++) {System.out.print(result.get(i) + " ");}System.out.println();}public static boolean isHe(int[] list) {int sum = 0;for (int i = 0; i < 9; i++) {sum += list[i];}if (sum == 0) {return true;}//寻找一个雀头if (sum % 3 != 0) {for (int i = 0; i < 9; i++) {if (list[i] >= 2) {list[i] -= 2;if (isHe(list)) {return true;}list[i] += 2;}}}//寻找刻子for (int i = 0; i < 9; i++) {if (list[i] >= 3) {list[i] -= 3;if (isHe(list)) {return true;}list[i] += 3;}}//寻找顺子for (int i = 0; i < 7; i++) {if (list[i] >= 1 && list[i + 1] >= 1 && list[i + 2] >= 1) {list[i]--;list[i + 1]--;list[i + 2]--;if (isHe(list)) {return true;}list[i]++;list[i + 1]++;list[i + 2]++;}}return false;}
}
字节跳动--雀魂启动相关推荐
- 字节题--雀魂启动!
雀魂启动!_字节跳动2019春招研发部分编程题汇总_牛客网 输入是13个数字,统计每个数字出现的次数,根据题意,次数最大为4,而出现的数字种类在4~9之间,和牌方式有两种,均需要一个雀头(2张一样的牌 ...
- 牛客网--字节跳动面试题--雀魂启动
牛客网--字节跳动面试题--雀魂启动 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 来源 链接:雀魂启动 来源:牛客网 题目 ...
- 牛客网:字节19研发:雀魂启动
这题想必大家看到都知道是个dfs搜索问题... 怎么构建思路呢?题目给了我们方向了,一个是顺子,还有一个是刻子,我们分别进行顺子和刻子的判断即可,这就是两个回溯的操作. 我们如何开始呢?可以对1-9中 ...
- C++笔试编程题1:雀魂启动
2019字节跳动笔试编程题 雀魂启动 小包最近迷上了一款叫做雀魂的麻将游戏,但是这个游戏规则太复杂,小包玩了几个月了还是输多赢少. 于是生气的小包根据游戏简化了一下规则发明了一种新的麻将,只留下一种花 ...
- 校招真题练习016 雀魂启动!(头条)
雀魂启动! 题目描述 小包最近迷上了一款叫做雀魂的麻将游戏,但是这个游戏规则太复杂,小包玩了几个月了还是输多赢少. 于是生气的小包根据游戏简化了一下规则发明了一种新的麻将,只留下一种花色,并且去除了一 ...
- 【STL容器使用案例】雀魂启动 (map容器\[]重载)
牛客上的一题: 雀魂启动 看了大佬的dfs用的是两个vector容器(一个计数,一个计牌,还要排序) #include <bits/stdc++.h> using namespace st ...
- 字节跳动春招——雀魂启动
小包最近迷上了一款叫做雀魂的麻将游戏,但是这个游戏规则太复杂,小包玩了几个月了还是输多赢少. 于是生气的小包根据游戏简化了一下规则发明了一种新的麻将,只留下一种花色,并且去除了一些特殊和牌方式(例如七 ...
- 字节跳动冬令营报名启动,邀你一起备战ICPC世界总决赛!
面向全球顶尖高校学生举办的国际顶级训练营--2020 字节跳动 ByteCamp 冬令营,启动全球报名了! 2020 字节跳动 Byte Camp 冬令营是针对ACM程序设计竞赛(ICPC),面向全球 ...
- [字节跳动编程题]雀魂启动!
1. 输入描述 总共有36张牌,每张牌是1-9.每个数字4张牌.输入只有一行,包含13个代表着13张牌的数字,用空格分隔,每个数字在1~9之间,数据保证同种数字最多出现4次. 2. 输出描述 输出同样 ...
最新文章
- 重磅日程公布!与百名大咖在线交流技术,2天20个AI论坛不可错过
- Python打造最强表白程序
- Spring中的异步任务
- Python sys.path详解
- 【.Net 学习系列】-- EF Core实践(Code First)
- 小米3g刷高格固件_小米路由器3G刷了老毛子之后恢复官方固件
- 图解MySQL 内连接、左连接、右连接
- Monster Hunter(2020南京M)
- 【渝粤教育】国家开放大学2018年秋季 0680-22T会计基础知识 参考试题
- 详解:JVM内存调优参数
- 龙果充值平台,具备话费充值、流量充值、话费卡兑换功能;可以拓展其他充值兑换业务;也适用于支付、鉴权等业务功能的拓展。
- JSON格式解析和libjson使用简介-转
- Chrome浏览器的自动保存密码提示功能禁用方法
- ImportError: No module named ‘keras_contrib‘
- SPSS学习笔记(四)非参数检验
- CentOS安装Nacos后,输入默认用户名和密码nacos/nacos,提示“用户名或密码错误”
- 如何破解瞻博网络认证的互联网专家 - JUNOS安全考试(JNCIS)
- un1que成员介绍
- python读取千万级数据库数据类型_解决python读取几千万行的大表内存问题
- 二叉树 最小公共祖先 c++版