给定一组数字,表示扑克牌的牌面数字,忽略扑克牌的花色,请安如下规则对这一组扑克牌进行整理。
4
时,组合牌为炸弹
;三张相同牌面数字+两张
相同牌面数字,且三张牌与两张牌不相同时,组合牌为葫芦
;三张相同牌面数字
,组合牌为三张
,两张相同牌面数字
,组合牌为对子
,单张
第一行为空格分隔的N个正整数,每个整数取值范围 ,N的取值范围
经重新排列后的扑克牌数字列表,每个数字以空格分隔
1 3 3 3 2 1 5
3 3 3 1 1 5 2
4 4 2 1 2 1 3 3 3 4
4 4 4 3 3 2 2 1 1 3
import java.util.*;
/**
* Created with IntelliJ IDEA.
* <br>Author: Amos
* <br>E-mail: amos@amoscloud.com
* <br>Date: 2023/1/16
* <br>Time: 10:10
* <br>Description:
*/
public class Main0198 {
public static void main(String[] args) {
try (Scanner scanner = new Scanner(System.in)) {
String line = scanner.nextLine();
solution(line);
}
}
private static void solution(String line) {
String[] split = line.split(" ");
Map<Integer, Integer> map = new HashMap<>();
for (String s : split) {
int number = Integer.parseInt(s);
map.put(number, map.getOrDefault(number, 0) + 1);
}
Comparator<Map.Entry<Integer, Integer>> entryComparator = (e1, e2) -> {
if (!e2.getValue().equals(e1.getValue())) {
return e2.getValue() - e1.getValue();
} else {
return e2.getKey() - e1.getKey();
}
};
List<Map.Entry<Integer, Integer>> list = new ArrayList<>(map.entrySet());
StringBuilder builder = new StringBuilder();
while (list.size() > 0) {
list.sort(entryComparator);
Map.Entry<Integer, Integer> first = list.get(0);
// 炸弹
if (first.getValue() >= 4) {
append(builder, first.getKey(), 4);
if (first.getValue() - 4 == 0) {
list.remove(0);
} else {
first.setValue(first.getValue() - 4);
}
continue;
}
// 葫芦 或 三
if (first.getValue() == 3 && list.size() > 1) {
Map.Entry<Integer, Integer> second = list.get(1);
if (second.getValue() >= 2) {
append(builder, first.getKey(), 3);
append(builder, second.getKey(), 2);
if (second.getValue() == 2) {
list.remove(1);
} else {
second.setValue(second.getValue() - 2);
}
list.remove(0);
continue;
} else {
append(builder, first.getKey(), 3);
list.remove(0);
continue;
}
}
//其他
int size = list.size();
for (int i = 0; i < size; i++) {
append(builder, list.get(0).getKey(), list.get(0).getValue());
list.remove(0);
}
}
System.out.print(builder.substring(0, builder.length() - 1));
}
private static void append(StringBuilder builder, int number, int count) {
for (int i = 0; i < count; i++) {
builder.append(number).append(" ");
}
}
}