字节真的每一题都让人窒息
1.小包最近迷上了一款叫做雀魂的麻将游戏,但是这个游戏规则太复杂,小包玩了几个月了还是输多赢少。
于是生气的小包根据游戏简化了一下规则发明了一种新的麻将,只留下一种花色,并且去除了一些特殊和牌方式(例如七对子等),具体的规则如下:
- 总共有36张牌,每张牌是1~9。每个数字4张牌。
- 你手里有其中的14张牌,如果这14张牌满足如下条件,即算作和牌
- 14张牌中有2张相同数字的牌,称为雀头。
- 除去上述2张牌,剩下12张牌可以组成4个顺子或刻子。顺子的意思是递增的连续3个数字牌(例如234,567等),刻子的意思是相同数字的3个数字牌(例如111,777)
import java.util.*;
public class Main{
private static int[] arr=new int[13];
private static int[] count=new int[9];
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
for(int i=0;i<13;i++){
arr[i]=sc.nextInt();
count[arr[i]-1]++;
}
int num=0;
for(int i=1;i<=9;i++){
if(count[i-1]<4){
count[i-1]++;
if(win()){
num++;
System.out.print(i);
System.out.print(" ");
}
count[i-1]--;
}
}
if(num==0) System.out.println(0);
}
public static boolean win(){
for(int i=1;i<=9;i++){
if(count[i-1]<2) continue;
count[i-1]-=2;
if(hasTriples(4)){
count[i-1]+=2;
return true;
}
count[i-1]+=2;
}
return false;
}
public static boolean hasTriples(int n){
if(n==0) return true;
for(int i=1;i<=9;i++){
if(count[i-1]>=3){
count[i-1]-=3;
boolean isTriples=hasTriples(n-1);
count[i-1]+=3;
if(isTriples) return true;
}
if(i<=7&&count[i-1]>0&&count[i]>0&&count[i+1]>0){
count[i-1]--;
count[i]--;
count[i+1]--;
boolean isTriples=hasTriples(n-1);
count[i-1]++;
count[i]++;
count[i+1]++;
if(isTriples) return true;
}
}
return false;
}
}