UVA11210麻将

2024-09-09 07:48
文章标签 麻将 uva11210

本文主要是介绍UVA11210麻将,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最简单的胡法,四个三张+一对
先枚举第14张牌
然后找出1对的牌之后dfs搜索三张的搭配


import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Scanner;
import java.util.Stack;
import java.util.StringTokenizer;public class Main {public static void main(String[] args) throws IOException{StreamTokenizer cin = new StreamTokenizer(new BufferedInputStream(System.in)); InputReader in = new InputReader(System.in)  ;PrintWriter out = new PrintWriter(System.out) ;int k = 1 ;String s ; for(;;){s = in.next() ;if(s.equals("0"))  break ;new Task().solve(k++ , s , in, out)  ;   //out.flush() ;}out.flush() ;}}class Task{static  ArrayList<String>  majiang = new ArrayList<String>(Arrays.asList("1T" , "2T" , "3T" , "4T" ,  "5T" , "6T" ,  "7T" , "8T" , "9T" ,     "1S" , "2S" , "3S" , "4S" ,  "5S" , "6S" ,  "7S" , "8S" , "9S" ,     "1W" , "2W" , "3W" , "4W" ,  "5W" , "6W" ,  "7W" , "8W" , "9W" ,     "DONG" , "NAN" , "XI" , "BEI" ,"ZHONG" , "FA" , "BAI" ));static  int[] mj = new int[13]  ;static  int[] num = new int[34] ;boolean  dfs(int d){for(int i = 0 ; i < 34 ;  i++){if(num[i] >= 3){if(d == 3) return  true ;num[i] -= 3 ;if(dfs(d + 1)) return true ;num[i] += 3 ;}}for(int i = 0 ; i <= 24 ; i++){if((i%9 <= 6) && num[i] >= 1 && num[i+1] >= 1 && num[i+2] >= 1){if(d == 3) return true ;num[i]-- ;num[i+1]-- ;num[i+2]-- ;if(dfs(d + 1)) return true ;num[i]++ ;num[i+1]++ ;num[i+2]++ ;}}return  false ;}boolean  helper(){for(int i = 0 ; i < 34 ; i++){if(num[i] >= 2){num[i] -= 2 ;if(dfs(0))  return  true ;num[i] += 2 ;}}return false ;}public void solve(int testcase , String s , InputReader  in , PrintWriter out) throws IOException{ArrayList<String> ans = new ArrayList<String>() ;mj[0] =  majiang.indexOf(s) ;for(int i = 1 ; i <= 12 ; i++) mj[i] =  majiang.indexOf(in.next()) ;for(int i = 0 ; i < 34 ; i++){Arrays.fill(num, 0) ;for(int j = 0 ; j <= 12 ; j++) num[mj[j]]++ ;if(num[i] >= 4)  continue ;num[i]++ ; if(helper()) ans.add(majiang.get(i)) ;num[i]-- ;  }out.print("Case " + testcase + ":") ;if(ans.size() == 0)  out.println(" Not ready") ;else{for(String e : ans)  out.print(" " + e) ;out.println() ;}}}class InputReader{public BufferedReader reader;public StringTokenizer tokenizer;public InputReader(InputStream stream){reader = new BufferedReader(new InputStreamReader(stream), 32768);tokenizer = null;}public String next(){while(tokenizer == null || !tokenizer.hasMoreTokens()){try{tokenizer = new StringTokenizer(reader.readLine());}catch (IOException e) {throw new RuntimeException(e);}}return tokenizer.nextToken();}public int nextInt() {return Integer.parseInt(next());}public long nextLong() {return Long.parseLong(next());}}

这篇关于UVA11210麻将的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1150576

相关文章

hdu4431麻将模拟

给13张牌。问增加哪些牌可以胡牌。 胡牌有以下几种情况: 1、一个对子 + 4组 3个相同的牌或者顺子。 2、7个不同的对子。 3、13幺 贪心的思想: 对于某张牌>=3个,先减去3个相同,再组合顺子。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOExcepti

Android安卓麻将识别源码Demo( 三)

Android安卓麻将识别源码Demo( 三) 未经过允许不得转载,转载请联系我,如何联系,点我头像。 连载已经完结, 百度网盘测试APP下载地址:  链接:https://pan.baidu.com/s/1grwUcLkI9i3OABsLtB5h3Q  提取码:pkbl  先见效果图,另外我已经上传到了抖音视频,想看NB效果,可以点击链接直接观看: http://v.douyin.com

Android安卓麻将识别源码Demo( 二 )

Android安卓麻将识别源码Demo( 二 ) 未经过允许不得转载,转载请联系我,如何联系,点我头像。            连载已经完结, 百度网盘测试APP下载地址:  链接:https://pan.baidu.com/s/1grwUcLkI9i3OABsLtB5h3Q  提取码:pkbl  先见效果图,另外我已经上传到了抖音视频,想看NB效果,可以点击链接直接观看: http:/

Android安卓麻将识别研发流程( 一 )

Android安卓麻将识别研发流程( 一 ) 未经过允许不得转载,转载请联系我,如何联系,点我头像。 连载已经完结, 百度网盘测试APP下载地址:  链接:https://pan.baidu.com/s/1grwUcLkI9i3OABsLtB5h3Q  提取码:pkbl  先见效果图,另外我已经上传到了抖音视频,想看NB效果,可以点击链接直接观看: http://v.douyin.com/

日本麻将入门(二):牌效率【基础】

基础牌效率 引入 日麻,又称立直麻将。日麻的水平本质上与你是否会立直有很大关系(参见常用役种:立直:优点),但立直最大的缺点就是不能副露,导致我们只能通过自己的摸切来完成听牌形的组成。在这个过程中,应该先切什么牌更容易让我们组成听牌形,这个问题就称为牌效率,牌效率并不是日麻专有的问题,但是在禁吃碰杠的情况下,提升牌效率会显得更为重要。 牌效率是做牌的艺术,那我们先回顾一下基本型和牌的形状,一

2015-华为招聘公开测试题目2-麻将番数

思路:使用C++函数将字符串进行分段,并对每段进行判定。 #include<iostream>#include<string>using namespace std;int IsStr4(string& str){//确定是抓到“杠”了if(str[0]==str[2] && str[0]==str[4] && str[0]==str[6]&&str[1]==str[3] &&

uva11210 Chinese Mahjong

接触计算机这么长时间(仔细想想,可能也就1年多吧),第一次觉得中国人还是能占到便宜的。。。。。。 简单的模拟,判断手中的麻将牌是否“下胡”以及缺什么牌,估计老外做这题会花上一段时间读题吧。 基本按照麻将的规则模拟: #include<cstdio>#include<cstring>#include<algorithm>using namespace std;char hand

游金麻将胡牌与算番

 20170426添加: 基本规则: 龙岩新庄麻将是流行于福建地区的麻将玩法,只能碰和杠,不能吃牌,也不能吃胡。 每局游戏会开出一张金牌,金牌可以当任何牌使用。 分为半自摸和全自摸两种模式,半自摸系统默认游金5倍,全自摸只能游金4倍。 游戏规则: 一、定庄 第一局游戏开始,系统随机选定一玩家坐庄。庄家和牌或流局,下一局可以连庄,否则由庄家的下家坐庄。第一局为东风东局,如果下庄

日本麻将中的牌型名称,充满格调与文艺

日本麻将最大的特色就是实现了二次元,身穿水手服的可爱妹子,还有充满激情的热血少年,通常都会在日本麻将中看到,这样一来,就给日本麻将带来了不一样的特色。其中最值得一提的就是日本麻将中的牌型名称,不仅听起来充满格调,里面还带有一些文艺的气息,既独特又有新意,那么接下来就让我们一起了解一下吧! 日本麻将牌型一:国土无双 或许在日本麻将游戏中,打麻将只是为了证明自己应有的实力,而不是感受麻将游戏的乐

麻将的玩法及技巧

麻将是一种古老而受欢迎的博弈游戏,其玩法和技巧多种多样,因地区和玩家习惯的不同而有所差异。以下是一些通用的麻将玩法和技巧: 一、玩法 洗牌与码牌:玩家双手搓动牌,使牌均匀而无序地运动,称为“洗牌”。洗均匀之后,每人码36张牌,两张牌上下摞在一起为一墩,各自为18墩,并码成牌墙摆在自己门前,四人牌墙左右相接成正方形。 开牌:在国标麻将中,庄家掷骰,两颗骰子的总和所得的点数就是开牌的基数。以庄家为