原题链接:蓝桥杯算法提高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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复