题目描述
斗地主起源于湖北十堰房县,据说是一位叫吴修全的年轻人根据当地流行的扑克玩法“跑得快”改编的,如今已风靡整个中国,并流行于互联网上。
牌型:单顺,又称顺子,最少5张牌,最多12张牌(3…A)不能有2,也不能有大小王,不计花色。
例如: 3-4-5-6-7-8,7-8-9-10-J-Q,3-4-5-6-7-8-9-10-J-Q-K-A
可用的牌 3<4<5<6<7<8<9<10<J<Q<K<A<2<B(小王)<C(大王),每种牌除大小王外有四种花色
(共有13×4+2张牌)
输入:
手上有的牌
已经出过的牌(包括对手出的和自己出的牌)
思路:没用到算法,用Hashmap存放扑克牌:对应张数 即可。
【模拟】
public class 最长的顺子 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String[] has = sc.nextLine().split(" ");
String[] lost = sc.nextLine().split(" ");
cal(has, lost);
}
static void cal(String[] has, String[] lost) {
Map<String, Integer> map = new HashMap<String, Integer>();
for (String temp : has) {
if (temp.equals("J")) {
temp = "11";
}
if (temp.equals("Q")) {
temp = "12";
}
if (temp.equals("K")) {
temp = "13";
}
if (temp.equals("A")) {
temp = "14";
}
if (map.containsKey(temp)) {
map.put(temp, map.get(temp) + 1);
} else {
map.put(temp, 1);
}
}
for (String temp : lost) {
if (temp.equals("J")) {
temp = "11";
}
if (temp.equals("Q")) {
temp = "12";
}
if (temp.equals("K")) {
temp = "13";
}
if (temp.equals("A")) {
temp = "14";
}
if (map.containsKey(temp)) {
map.put(temp, map.get(temp) + 1);
} else {
map.put(temp, 1);
}
}
for (int i = 3; i <= 14; i++) {
String s = String.valueOf(i);
if (!map.containsKey(s)) {
map.put(s, 4);
} else {
int know = map.get(s);
map.put(s, 4 - know);
}
}
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.print(entry.getKey() + " ");
System.out.println(entry.getValue());
}
int total = 0;
int maxL = 0;
StringBuffer sb = new StringBuffer();
StringBuffer maxSb = null;
for (int i = 3; i <= 14; i++) {
String s = String.valueOf(i);
if (map.get(s) > 0) {
total++;
if (s.equals("11")) {
s = "J";
}
if (s.equals("12")) {
s = "Q";
}
if (s.equals("13")) {
s = "K";
}
if (s.equals("14")) {
s = "A";
}
sb.append(s + " ");
} else {
if (total < 5) {
total = 0;
} else {
if (maxL < total) {
maxL = total;
maxSb = new StringBuffer(sb);
} else if (maxL == total) {
maxSb = new StringBuffer(sb);
}
}
sb.setLength(0);
}
}
if (total < 5) {
total = 0;
} else {
if (maxL < total) {
maxL = total;
maxSb = new StringBuffer(sb);
} else if (maxL == total) {
maxSb = new StringBuffer(sb);
}
}
if (maxSb == null) {
System.out.println("NO-CHAIN");
} else {
System.out.println(maxSb);
}
}
}