题目要求
(这题自己编着玩的)
现有一副扑克牌,不分花色,分别是 A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, King 。
要求编写一个判断抽到的n张牌是不是顺子的程序(王不算顺子里的Part)。
分析
由于 A < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 < 10 < J < Q < K,我们要用Character肯定不好直接处理,因为A与2、10与J不连续,10也不是char,更何况还有King。
所以我就建立一个映射关系的HashMap,用于查找。
将A定义为1,J定义为11,Q定义为12,K定义为13。
顺子必须是5张牌以上,所以先输入的num不足5就Pass。
接下来把获取的卡放进Set里,如果Map里没有,就不能凑成顺子。还要判重,如果重复就不是顺子。
最后做一下数据统计,因为用了TreeSet就完成了排序嘛,所以保证每一个输出的数值都是前一个的值+1,就完事。
思路不一定是最简,只是我的一个想法,有更好的方法还请多多指教,感谢。
实现代码(Java语言描述)
import java.util.*;
public class CardsTest {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>(13);
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("10", 10);
map.put("J", 11);
map.put("Q", 12);
map.put("K", 13);
Set<Integer> set = new TreeSet<>();
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
if (num < 5) {
System.out.println("NO");
return;
}
for (int i = 0; i < num; i++) {
String input = scanner.next();
if (!map.containsKey(input)) {
System.out.println("NO");
return;
}
int card = map.get(input);
if (set.contains(card)) {
System.out.println("NO");
return;
}
set.add(card);
}
scanner.close();
int prev = 0, counter = 0;
for (int i : set) {
if (counter == 0) {
prev = i;
counter++;
} else {
if (prev == i-1) {
prev = i;
} else {
System.out.println("NO");
return;
}
}
}
System.out.println("YES");
}
}