斗地主

来源:互联网 发布:淘宝的来历 编辑:程序博客网 时间:2024/06/10 05:36
/*描述 火箭:即双王(大王和小王)。炸弹:四张同数值牌。单牌:单个牌。对牌:数值相同的两张牌。三张牌:数值相同的三张牌。 三带一:数值相同的三张牌 + 一张单牌或一对牌。例如: 333+6或444+99 单顺:五张或更多的连续单牌(如:45678或78910JQK)。不包括2点和双王。 双顺:三对或更多的连续对牌(如:334455)。不包括2点和双王。三顺:二个或更多的连续三张牌(如:333444)。 不包括2点和双王。 飞机带翅膀:三顺+同数量的单牌(或同数量的对牌)。如:444555+79 或333444555+7799JJ 四带二:四张牌+两手牌(如:5555+3+8或4444+55+77)。  给定n张牌,判断能不能一次出完。 输入 第一行输入一个整数T(T <= 50),表示有几组数据。每组数据占一行,每一行的第一个数n(0 < n <= 20)表示这组测试数据有n张牌,接下来是n张牌。  (总共有15张不同的牌:A 2 3 4 5 6 7 8 9 10 J Q K J1 J2, J1、J2代表大小王,其它相同的牌最多四张) 输出 对于每组测试数据占一行,格式为:Case #a: Str,a是第几组数据,从1开始。如果能一次出完则Str 为Yes, 否则为No。 样例输入 3 2 J1 J2 5 A A A 5 6 8 8 8 8 8 9 9 9 9 样例输出 Case #1: Yes Case #2: No Case #3: Yes*/import java.util.*;public class Main2 {public static int n, num;public static String[] str = { "A", "2", "3", "4", "5", "6", "7", "8", "9","10", "J", "Q", "K", "J1", "J2" };public static int[][] strNum;public static String[] array;public static void main(String[] args) {Scanner sc = new Scanner(System.in);n = sc.nextInt();for (int i = 0; i < n; i++) {num = sc.nextInt();array = new String[num];strNum = new int[num][15];for (int j = 0; j < num; j++) {array[j] = sc.next();for (int k = 0; k < 15; k++) {if (array[j].equals(str[k])) {strNum[i][k]++;}}}check(num, i + 1, strNum[i], array);}}public static void check(int n, int index, int[] strNum, String[] str) {switch (n) {case 1:// 单张牌System.out.println("Case #" + index + ": Yes");break;case 2:// 一对或者是大小王if (str[1].equals("J2") && str[0].equals("J1")|| str[0].equals(str[1]) || str[0].equals("J2")&& str[1].equals("J1")) {System.out.println("Case #" + index + ": Yes");} elseSystem.out.println("Case #" + index + ": No");break;case 3:// 三张一样的牌if (str[0].equals(str[1]) && str[1].equals(str[2]))System.out.println("Case #" + index + ": Yes");elseSystem.out.println("Case #" + index + ": No");break;case 4:// 三带一或者炸弹for (int k = 0; k < 13; k++) {if (strNum[k] == 4 || strNum[k] == 3) {System.out.println("Case #" + index + ": Yes");return;}}System.out.println("Case #" + index + ": No");break;case 5:// 单顺for (int i = 0; i < 10; i++) {if (strNum[i] == 1 && strNum[i + 1] == 1 && strNum[i + 2] == 1&& strNum[i + 3] == 1 && strNum[(i + 4) % 13] == 1) {System.out.println("Case #" + index + ": Yes");return;}}// 3带2int tmp = 0;for (int i = 0; i < 13; i++) {if (strNum[i] == 3 || strNum[i] == 2) {tmp++;}}if (tmp == 2) {System.out.println("Case #" + index + ": Yes");} else {System.out.println("Case #" + index + ": No");}break;case 6:// 单顺for (int i = 0; i < 9; i++) {if (strNum[i] == 1 && strNum[i + 1] == 1 && strNum[i + 2] == 1&& strNum[i + 3] == 1 && strNum[i + 4] == 1&& strNum[(i + 5) % 13] == 1) {System.out.println("Case #" + index + ": Yes");return;}}int n1 = 0;int n2 = 0;int n3 = 0;// 双顺或者三顺for (int i = 0; i < 13; i++) {if (strNum[i] == 3)n1++;if (strNum[i] == 2)n2++;if (strNum[i] == 4)n3++;}if (n3 == 1 || n1 == 2 || n2 == 3 || n2 == 3 || n1 == 2) {System.out.println("Case #" + index + ": Yes");} else {System.out.println("Case #" + index + ": No");}break;default:// 单顺int k1 = 0;// 双顺int k2 = 0;int k3 = 0;int k4 = 0;for (int i = 0; i < 13; i++) {if (strNum[i] == 1)k1++;if (strNum[i] == 2)k2++;if (strNum[i] == 3 && strNum[i + 1] == 3)k3++;if (strNum[i] == 4)k4++;}if (k1 == n || k2 * 2 == n || (k3 + 1) * 3 == n|| k2 * 2 + (k3 + 1) * 3 == n || k3 * 3 + k1 == n|| k4 * 4 + k1 == n || k4 * 4 + k2 * 2 == n|| (k3 + 1) * 3 + k1 == n) {System.out.println("Case #" + index + ": Yes");} else {System.out.println("Case #" + index + ": No");}break;}}}

0 0
原创粉丝点击