小包最近迷上了一款叫做雀魂的麻将游戏,但是这个游戏规则太复杂,小包玩了几个月了还是输多赢少。

于是生气的小包根据游戏简化了一下规则发明了一种新的麻将,只留下一种花色,并且去除了一些特殊和牌方式(例如七对子等),具体的规则如下:

  1. 总共有36张牌,每张牌是1~9。每个数字4张牌。
  2. 你手里有其中的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;}
}

字节跳动--雀魂启动相关推荐

  1. 字节题--雀魂启动!

    雀魂启动!_字节跳动2019春招研发部分编程题汇总_牛客网 输入是13个数字,统计每个数字出现的次数,根据题意,次数最大为4,而出现的数字种类在4~9之间,和牌方式有两种,均需要一个雀头(2张一样的牌 ...

  2. 牛客网--字节跳动面试题--雀魂启动

    牛客网--字节跳动面试题--雀魂启动 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 来源 链接:雀魂启动 来源:牛客网 题目 ...

  3. 牛客网:字节19研发:雀魂启动

    这题想必大家看到都知道是个dfs搜索问题... 怎么构建思路呢?题目给了我们方向了,一个是顺子,还有一个是刻子,我们分别进行顺子和刻子的判断即可,这就是两个回溯的操作. 我们如何开始呢?可以对1-9中 ...

  4. C++笔试编程题1:雀魂启动

    2019字节跳动笔试编程题 雀魂启动 小包最近迷上了一款叫做雀魂的麻将游戏,但是这个游戏规则太复杂,小包玩了几个月了还是输多赢少. 于是生气的小包根据游戏简化了一下规则发明了一种新的麻将,只留下一种花 ...

  5. 校招真题练习016 雀魂启动!(头条)

    雀魂启动! 题目描述 小包最近迷上了一款叫做雀魂的麻将游戏,但是这个游戏规则太复杂,小包玩了几个月了还是输多赢少. 于是生气的小包根据游戏简化了一下规则发明了一种新的麻将,只留下一种花色,并且去除了一 ...

  6. 【STL容器使用案例】雀魂启动 (map容器\[]重载)

    牛客上的一题: 雀魂启动 看了大佬的dfs用的是两个vector容器(一个计数,一个计牌,还要排序) #include <bits/stdc++.h> using namespace st ...

  7. 字节跳动春招——雀魂启动

    小包最近迷上了一款叫做雀魂的麻将游戏,但是这个游戏规则太复杂,小包玩了几个月了还是输多赢少. 于是生气的小包根据游戏简化了一下规则发明了一种新的麻将,只留下一种花色,并且去除了一些特殊和牌方式(例如七 ...

  8. 字节跳动冬令营报名启动,邀你一起备战ICPC世界总决赛!

    面向全球顶尖高校学生举办的国际顶级训练营--2020 字节跳动 ByteCamp 冬令营,启动全球报名了! 2020 字节跳动 Byte Camp 冬令营是针对ACM程序设计竞赛(ICPC),面向全球 ...

  9. [字节跳动编程题]雀魂启动!

    1. 输入描述 总共有36张牌,每张牌是1-9.每个数字4张牌.输入只有一行,包含13个代表着13张牌的数字,用空格分隔,每个数字在1~9之间,数据保证同种数字最多出现4次. 2. 输出描述 输出同样 ...

最新文章

  1. 重磅日程公布!与百名大咖在线交流技术,2天20个AI论坛不可错过
  2. Python打造最强表白程序
  3. Spring中的异步任务
  4. Python sys.path详解
  5. 【.Net 学习系列】-- EF Core实践(Code First)
  6. 小米3g刷高格固件_小米路由器3G刷了老毛子之后恢复官方固件
  7. 图解MySQL 内连接、左连接、右连接
  8. Monster Hunter(2020南京M)
  9. 【渝粤教育】国家开放大学2018年秋季 0680-22T会计基础知识 参考试题
  10. 详解:JVM内存调优参数
  11. 龙果充值平台,具备话费充值、流量充值、话费卡兑换功能;可以拓展其他充值兑换业务;也适用于支付、鉴权等业务功能的拓展。
  12. JSON格式解析和libjson使用简介-转
  13. Chrome浏览器的自动保存密码提示功能禁用方法
  14. ImportError: No module named ‘keras_contrib‘
  15. SPSS学习笔记(四)非参数检验
  16. CentOS安装Nacos后,输入默认用户名和密码nacos/nacos,提示“用户名或密码错误”
  17. 如何破解瞻博网络认证的互联网专家 - JUNOS安全考试(JNCIS)
  18. un1que成员介绍
  19. python读取千万级数据库数据类型_解决python读取几千万行的大表内存问题
  20. 二叉树 最小公共祖先 c++版

热门文章

  1. 上交所、深交所配股的资金交收与股份交收流程
  2. 开源我的分形风暴2程序+一些漂亮的分形图
  3. 信创办公–基于WPS的EXCEL最佳实践系列 (处理合并单元格)
  4. xposed一些原理总结
  5. Guitar Pro教程之不认识的符号讲解
  6. IT人介绍自己的产品有难度
  7. 每天读一遍,坚持27天,你的英语水平就可以达到跟美国人交流的水平啦!
  8. 案例演示 | 基于Motor-CAD日产聆风汽车电机的多物理场仿真
  9. 大数据平台ambari
  10. idea篇:idea快捷键设置