算法提高 12-2撲克排序

問題描述
  撲克牌排序:構造撲克牌數組,對撲克牌進行排序。排序原則如下:數字從小到大是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) + " ");
			
		}
	}

}


發佈了43 篇原創文章 · 獲贊 39 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章