ZOJ-2409

来源:互联网 发布:甘肃java培训机构中心 编辑:程序博客网 时间:2024/06/05 09:26

MS是目前写过的代码最多的一道题,题目读半天,英语捉鸡只能不停查有道,大意就是一共5张牌,给观众一张,魔术师手里有4张,然后猜观众的牌,剩下的4张中,后面3张的最小牌值的位置先确定,1,2,3  3种情况,然后第一张牌的牌值加上这个位置数字,剩下的两张牌牌序如果是反的,那么这个值再加3,算出的值对13取余,然后取第一张牌的花色,合起来就是观众的手里的牌。理解了之后就是苦力码代码了,WA了一次,最后那个数字算出来之后还要转下字母的,比如说12要转成Q,我原先直接就用12来拼了。。

import java.util.ArrayList;import java.util.Arrays;import java.util.Comparator;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Scanner;public class Main{public static void main(String[] args){Scanner sc = new Scanner(System.in);int n = sc.nextInt();sc.nextLine();for (int i = 1; i <= n; i++){String line = sc.nextLine();String[] array = line.split(" ");Arrays.sort(array, new CardCmp());List<String[]> all = allString(array);for (String[] a : all)if (isRight(a)){System.out.format("Problem %d:", i);for (String s : a)System.out.print(" " + s);System.out.println();break;}}}static boolean isRight(String[] array){if (getSuit(array[0]) != getSuit(array[1]))return false;int p = positionOfThree(array[2], array[3], array[4]);int number = getNumber(array[1]);number += p;int a, b;if (p == 1){a = 3;b = 4;}else if (p == 2){a = 2;b = 4;}else{a = 2;b = 3;}if (new CardCmp().compare(array[a], array[b]) > 0)number += 3;number %= 13;String result = getFirstChar(number) + "" + getSuit(array[1]);return array[0].equals(result);}static String getFirstChar(int number){if (number == 1)return "A";else if (number == 11)return "J";else if (number == 12)return "Q";else if (number == 13)return "K";elsereturn number + "";}static char getSuit(String s){return s.charAt(s.length() - 1);}static int getNumber(String s){return CardCmp.map.get(s.charAt(0));}static List<String[]> allString(String[] array){List<String[]> all = new ArrayList<String[]>();for (int i = 0; i < 5; i++)for (int j = 0; j < 5; j++)if (j != i)for (int k = 0; k < 5; k++)if (k != j && k != i)for (int l = 0; l < 5; l++)if (l != k && l != j && l != i)for (int m = 0; m < 5; m++)if (m != l && m != k && m != j&& m != i)all.add(new String[] { array[i],array[j], array[k],array[l], array[m] });return all;}static int positionOfThree(String s1, String s2, String s3){CardCmp cc = new CardCmp();String min = s1;int index = 1;if (cc.compare(min, s2) > 0){min = s2;index = 2;}if (cc.compare(min, s3) > 0)index = 3;return index;}static class CardCmp implements Comparator<String>{static Map<Character, Integer> map = new HashMap<Character, Integer>();static{map.put('A', 1);map.put('2', 2);map.put('3', 3);map.put('4', 4);map.put('5', 5);map.put('6', 6);map.put('7', 7);map.put('8', 8);map.put('9', 9);map.put('1', 10);map.put('J', 11);map.put('Q', 12);map.put('K', 13);};@Overridepublic int compare(String o1, String o2){int i1 = map.get(o1.charAt(0));int i2 = map.get(o2.charAt(0));if (i1 != i2)return i1 - i2;elsereturn o1.charAt(o1.length() - 1) - o2.charAt(o2.length() - 1);}}}


0 0
原创粉丝点击