原题链接:蓝桥杯算法提高VIP-扑克排序
参考代码:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
class pkp {
String name;
char type;
}
public class 扑克牌排序 {
/**
* @param args
*/
static Map<Character, Integer> map = new HashMap<Character, Integer>();
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
* 题目 1975: [蓝桥杯][算法提高VIP]扑克排序 时间限制: 1Sec 内存限制: 128MB 提交: 204 解决: 99
* 题目描述
* 扑克牌排序:构造扑克牌数组,对扑克牌进行排序。排序原则如下:数字从小到大是2-10、J、Q、K和A,花色从小到大是方块(diamond
* )、梅花(club)、红桃(heart)、黑桃(spade)。两张牌比较时先看数字,数字相同时看花色。要求对输入的扑克牌进行从小到大排序。
* 输入五张牌(表示黑桃2、红桃3、黑桃3、方块A和梅花J): 2 s 3 h 3 s A d J c 输出结果应为:2 s 3 h 3 s
* J c A d数组长度固定为5。 输入 输入五张牌(表示黑桃2、红桃3、黑桃3、方块A和梅花J): 2s3h3sAdJc 输出
* 输出结果应为:2s 3h 3s Jc Ad数组长度固定为5。
*/
Scanner scanner = new Scanner(System.in);
ArrayList<pkp> arrayList1 = new ArrayList<pkp>();// 数字
ArrayList<pkp> arrayList2 = new ArrayList<pkp>();// 字母
map.put('d', 1);
map.put('c', 2);
map.put('h', 3);
map.put('s', 4);
map.put('J', 11);
map.put('Q', 12);
map.put('K', 13);
map.put('A', 14);
String s = scanner.nextLine();
int i = 0, j = 0;
while (j < s.length()) {
pkp pk = new pkp();
if (s.charAt(j) == '1') {
pk.name = "1"+s.charAt(j + 1);
pk.type = s.charAt(j + 2);
j += 3;
} else {
pk.name = ""+s.charAt(j);
pk.type = s.charAt(j + 1);
j += 2;
}
if (pk.name.matches("[0-9]+")) {
arrayList1.add(pk);
}
else {
arrayList2.add(pk);
}
}
Collections.sort(arrayList1, new Comparator<pkp>() {
@Override
public int compare(pkp arg0, pkp arg1) {
// TODO Auto-generated method stub
if (!arg0.name.equals(arg1.name)) {
// 如果两个都是数字 那么就比较大小
return Integer.parseInt(arg0.name) > Integer
.parseInt(arg1.name) ? 1 : -1;
} else {
return map.get(arg0.type) > map.get(arg1.type) ? 1 : -1;
}
}
});
Collections.sort(arrayList2, new Comparator<pkp>() {
@Override
public int compare(pkp arg0, pkp arg1) {
// TODO Auto-generated method stub
if (!arg0.name.equals(arg1.name)) {
// 如果两个都是数字 那么就比较大小
return map.get(arg0.name.charAt(0)) > map.get(arg1.name
.charAt(0)) ? 1 : -1;
} else {
return map.get(arg0.type) > map.get(arg1.type) ? 1 : -1;
}
}
});
for (pkp a : arrayList1) {
System.out.print(a.name + a.type + " ");
}
for (pkp a : arrayList2) {
System.out.print(a.name + a.type + " ");
}
}
}0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复