撲克牌的順子問題

題目:從撲克牌中隨機抽5 張牌,判斷是否是一個順子,即這5 張牌是否是連續的。2-10 爲數字自己,A 爲1,J,爲11,Q 爲12,K 爲13,而大小王能夠當作任意數字。java

tip:將取出的5張牌排序並假定大小王爲0,則會出現三種狀況;數組

一、5張牌中沒有王,則5張牌的數字必須爲連續,即間隔爲0dom

二、5張牌中有一個王,則容許出現間隔爲1的狀況blog

三、5張牌中有兩個王,則容許出現間隔爲2的狀況排序

public static void main(String[] args) {
	Random random = new Random();
	int[] array = new int[5];
	for (int i = 0; i < array.length; i++) {
		array[i] = i + 10 * random.nextInt(1);
	}
	// 將數組排序,並假定大小王爲0
	Arrays.sort(array);
	if (array[0] > 0) {// 5張牌中沒有王
		checkGap(array, 0, 4, 0);
	} else if (array[0] == 0 && array[1] != 0) {// 5張牌有一個王
		checkGap(array, 1, 4, 1);
	} else {// 5張牌有兩個王
		checkGap(array, 2, 4, 2);
	}
}
/**
*allowGap,可能出現的間隔數
*/
private static void checkGap(int[] array, int start, int end, int allowGap) {
	int from = start;
	while (from < end) {
		allowGap -= array[from + 1] - array[from] - 1;
		if (allowGap < 0) {
			return;
		}
		from++;
	}
}
相關文章
相關標籤/搜索