首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

java-67-扑克的顺子.从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.2-10为数字本身,A为1,J为11,Q为12,K为13,而大

2012-07-27 
java-67-扑克牌的顺子.从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.2-10为数字本身,

java-67-扑克牌的顺子.从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.2-10为数字本身,A为1,J为11,Q为12,K为13,而大

import java.util.Arrays;import java.util.Random;public class ContinuousPoker {/**Q67 扑克牌的顺子 * 从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。 * 2-10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意数字。 */private static final int[] poker={0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,1,2,3,4,5,6,7,8,9,10,11,12,13,1,2,3,4,5,6,7,8,9,10,11,12,13,1,2,3,4,5,6,7,8,9,10,11,12,13};private static final int MAX=5;private static final int MAX_VAL=13;public static void main(String[] args) {//test 1.Specific data for test.int[][] testData={{7,8,0,10,11},{7,8,0,0,11},{8,9,9,10,11},{7,8,9,10,11},};for(int[] pokerSelected:testData){test(pokerSelected);}//test 2.Imitate the real situation:Select 5 poker randomly.int[] pokerSelected=randomSelect(poker,MAX);test(pokerSelected);}public static void test(int[] pokerSelected){System.out.println(Arrays.toString(pokerSelected));boolean continuous=isContinuous(pokerSelected);System.out.println("continuous is "+continuous);}/*1)确认5张牌中除了0,其余数字没有重复的(可以用表统计的方法);2) 满足这样的逻辑:(max,min分别代表5张牌中的除0以外的最大值最小值)       如果没有0,则max-min=4,则为顺子,否则不是       如果有一个0,则max-min=4或者3,则为顺子,否则不是       如果有两个0,则max-min=4或者3或者2,则为顺子,否则不是最大值和最小值在1)中就可以获得 */public static boolean isContinuous(int[] x){int[] existTimes=new int[MAX_VAL+1];boolean result=false;int len=x.length;int max=x[0],min=x[0];int zeroCount=0;for(int i=0;i<len;i++){existTimes[x[i]]++;//record the number of occurrencesif(x[i]==0){zeroCount++;}else{if(x[i]>max)max=x[i];if(x[i]<min)min=x[i];}}for(int i=1;i<MAX_VAL;i++){//i starts from 1,exclude '0'if(existTimes[i]>1){//duplicate non-zero elementreturn false;}}if(zeroCount==0){if(max-min==MAX-1)result=true;}else if(zeroCount==1){if(max-min==MAX-1 || max-min==MAX-2)result=true;}else if(zeroCount==2){if(max-min==MAX-1  || max-min==MAX-2  || max-min==MAX-3)result=true;}return result;}/* * @param count how many elements you want to pick * @param data the data array */public static int[] randomSelect(int[] data,int count){int[] result=new int[count];int len=data.length;for(int i=0;i<count;i++){Random random=new Random();int pos=random.nextInt(len);result[i]=data[pos];//pick out the element data[pos]=data[len-1];//and replace it with the last elementlen--;}return result;}}

热点排行