原题链接:蓝桥杯算法提高VIP-扑克排序
解题思路: 构造对象,重写排序方法,格式化输出
注意事项: 注意牌面的大小的字符、牌面的花色的优先级处理
参考代码:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class Main implements Comparable<Object> {
int num; //表示牌面值的优先级: 2/3/4/5/6/7/8/9/10/11/12/13/14
String zhi; //表示牌面原本的值: 2/3/4/5/6/7/8/9/10/J/Q/K/A
int color; //表示牌面花色的优先级: 0/1/2/3
char se; //表示牌面花色原本的值: d/c/h/s
Main(String num,char color){ //构造并重新设置花色优先级、牌面优先级
this.se=color;this.zhi=num;
if(color=='d')this.color=0;
if(color=='c')this.color=1;
if(color=='h')this.color=2;
if(color=='s')this.color=3;
if(num.equals("J"))this.num=11;
else if(num.equals("Q"))this.num=12;
else if(num.equals("K"))this.num=13;
else if(num.equals("A"))this.num=14;
else this.num=Integer.parseInt(num);
}
public int compareTo(Object o) {
int flag=-1;
Main o1=(Main)o;
if(this.num>o1.num) //先比较数值优先级
flag=1;
else if(this.num==o1.num) { //再比较花色优先级
if(this.color>o1.color)
flag=1;
else
flag=-1;
}
return flag;
}
public String toString() {
return this.zhi+this.se; //输出格式
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s =in.next();
ArrayList<Main> arr =new ArrayList<Main>();
int i=0;
while(i<s.length()) { //控制当i=length时停止输入
if(s.charAt(i)>='2'&&s.charAt(i)<='9')
{arr.add(new Main(""+s.charAt(i),s.charAt(i+1)));i=i+2;}
else if(s.charAt(i)=='J')
{arr.add(new Main("J", s.charAt(i+1)));i=i+2;}
else if(s.charAt(i)=='Q')
{arr.add(new Main("Q", s.charAt(i+1)));i=i+2;}
else if(s.charAt(i)=='K')
{arr.add(new Main("K", s.charAt(i+1)));i+=2;}
else if(s.charAt(i)=='A')
{arr.add(new Main("A", s.charAt(i+1)));i+=2;}
else //此时为牌面为10
{arr.add(new Main("10",s.charAt(i+2)));i+=3;}
}
Collections.sort(arr);
for(Main e:arr)
System.out.print(e+" ");
in.close();
}
}0.0分
9 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复