2~10为数字本身,A为1,J为11,Q为12,K为13,而大,小王可以看成任意数字
我是真的造了一副牌去解决这个问题的,一个数组长度为54
这道题的重点在于判断是否是一个顺子,首先将五个数进行排序,计算每相邻两个数之间的差的和跟0(大小王)的个数进行比较,如果这个差的和小于0的个数,那么就是一个顺子,此外还要考虑除0以外如果出现对子直接判断不是顺子
部分代码如下
public static boolean judge(int[] crr) {
Arrays.sort(crr);
int distance = 0;//每相邻两个数之差的和
int zero=0;//0的个数
System.out.println(Arrays.toString(crr));
for(int i=0;i<crr.length&&crr[i]==0;i++,zero++);
for(int i=zero;i<crr.length-1;i++){
if(crr[i]==crr[i]+1){
return false;
}
if(!(crr[i]+1==crr[i+1])){
distance+=crr[i+1]-crr[i]-1;
}
}
if(zero < distance){
return false;
}else{
return true;
}
}
下面进行测试(与上面的代码一起进行)
public class PlayingCard {
//按顺序创建一副扑克牌
public static void create(int[] arr){
Random random = new Random();
int size=0;
for(int i=1;i<=13;i++){
for(int j=1;j<=4;j++){
arr[size++]=i;
}
}
}
//打乱这副牌的顺序
public static void upset(int[] arr){
Random random = new Random();
int flag=0,temp;
while(flag<=1000){
int n1 = random.nextInt(53);
int n2 = random.nextInt(53);
temp=arr[n1];
arr[n1]=arr[n2];
arr[n2]=temp;
flag++;
}
}
public static void main(String[] args) {
System.out.print("请抽出五张牌(输入数组下标):");
int[] arr = new int[54];//一副牌
int[] brr = new int [5];//五张牌的下标
int[] crr = new int[5];//抽出的五张牌
create(arr);//创建一副牌
upset(arr);//把这副牌的顺序打乱
Scanner scanner = new Scanner(System.in);
for(int i=0;i<brr.length;i++){
brr[i]=scanner.nextInt();
crr[i]=arr[brr[i]-1];
System.out.print(crr[i]+" ");
}
System.out.println();
if(judge(crr)){//判断5张牌是否是顺子
System.out.println("这五张牌是顺子");
}else{
System.out.println("这五张牌不是顺子");
}
System.out.println();
System.out.println(Arrays.toString(arr));
}
}
测试结果