您的位置:首页 > 编程语言 > Java开发

算法提高 12-2扑克排序

2017-04-06 11:35 281 查看
问题描述

  扑克牌排序:构造扑克牌数组,对扑克牌进行排序。排序原则如下:数字从小到大是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。

样例输出

与上面的样例输入对应的输出。

例:



数据规模和约定

  输入数据中每一个数的范围。

/**
* 思路:将扑克牌的数字部分乘以10加上花色对应的值(自己设定)组成一个新的int数。
* 将新的int数组排序
* 输出
*/
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
String s1 = "";
String s2 = "";
String x1 = "dchs";//四中花色的数字分别为0123(下标)
String x2 = "0123456789SJQKA";
//将原字符串分成俩个子串,一个放数字部分,一个放花色部分
for(int i=0,j=1;i<s.length()-1;){
s1 = s1 + s.charAt(i);
s2 = s2 + s.charAt(j);
i = i+2;j = j+2;

}
int[] array = new int[s1.length()];
for(int k=0;k<array.length;k++){
//数组的值为数字在x2中的下标乘以10+花色在x1中的下标
//乘以10的目的是扩大比较时数字的作用
array[k] = x2.indexOf(s1.charAt(k))*10 + x1.indexOf(s2.charAt(k));
}
//排序
Arrays.sort(array);
//输出
for(int m=0;m<array.length;m++){
int shuzi = array[m]/10;
int huase = array[m]%10;
System.out.print(x2.charAt(shuzi) +""+ x1.charAt(huase) + " ");

}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 java