当前位置: 首页 > 面试题库 >

手写代码:5个扑克牌是否是顺子,大小王当成任意的

荀正谊
2023-03-14
本文向大家介绍手写代码:5个扑克牌是否是顺子,大小王当成任意的相关面试题,主要包含被问及手写代码:5个扑克牌是否是顺子,大小王当成任意的时的应答技巧和注意事项,需要的朋友参考一下

参考回答:

这是剑指offer原题

从扑克牌中随机抽出5张牌,判断是不是一个顺子,即这五张牌是不是连续的。2——10为数字本身,A为1,J为11,Q为12,K为13,而大小王为任意数字。

package org.marsguo.offerproject44;
import java.util.Scanner;
class SolutionMethod1{
public void sortfun(int[] arrays,int start, int end){
int numOfZero=0;
if(start>=end){                //判断数组的起始和终止是否相同,相同表示已经都全部排完,返回

return;

}

int i = start;                //i指向数组的起始位

int j = end;                //j指向数组的末位

int key = arrays[i];            //选取数组的第一位为关键字key,基准元素

boolean flag = true;            //设置标志位,用于判断是i++还是j--;这个很重要

while(i != j){                //如果i≠j,表示还没有比较完,即即关键字左右两侧还不是最小与最大

if(flag){

if(key>arrays[j]){          //从后向前遍历,找到小于key的值,

swap(arrays,i,j);        //找到小于key的值后将arrays[i]与此值交换

flag = false;

}else{                //如果没有找到的话j--,向前遍历

j--;

}

}else{

if(key<arrays[i]){          //从前向后遍历,找到大于key的值

swap(arrays,i,j);        //将此值与arrays[j]进行交换

flag = true;

}else{                //如果没有找到话就将i++,向后遍历

i++;

}

}

}

//sprint(arrays);                //打印每次排序后的数组

sortfun(arrays,start,j-1);          //递归调用,将基准元素的前半段数组再用此方法进行排序,直到所有都排完为止。

sortfun(arrays,i+1,end);          //递归调用,将基准元素的后半段数组再用此方法进行排序,直到所有都排完为止。



//System.out.println("排序后的数组是:");
for(int k = 0; k < arrays.length; k++){
if(arrays[k] == 0){
numOfZero++;
}
//System.out.print("numOfZero= " + numOfZero + ";"+arrays[k] + ", ");
//System.out.print(arrays[k] + ", ");
}
IsContinuousFun(arrays, numOfZero);
}
public void swap(int[] array,int i,int j){
int temp;
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
public void IsContinuousFun(int[] array,int numOfZero){
int numOfGap = 0;        //判断数字中间空了多少个0

//System.out.println("numberOfZero = " + numOfZero);

for(int j = 1; j < array.length; j++){

int flag = array[j] - array[j-1];    //用排序数组中后一个数字-前一个数字

if(array[j] == array[j-1] && array[j] != 0){    //如果数组中有重复的非0数字,则不是顺子,退出

System.out.println("有重复数字,不是顺子牌");

return;

}

else if(flag != 1 && flag != 0 && array[j-1] != 0){      //判断不是连续的数字,也不是0,

numOfGap += flag-1;                 //非0数字间缺少的数字的个数

}

}

if(numOfZero != numOfGap){

System.out.println("这不是一个顺子扑克牌");

}

else{

System.out.println("这是一张顺子扑克牌");
}
}
}
public class IsContinuous {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);            //扫描键盘输入

System.out.println("请输入五张牌:");

String str = scanner.nextLine();                //将键盘输入转化为字符串

String[] temp = str.split(" ");                  //将字符串用“ ”分开转化为字符串数组

scanner.close();

int[] array = new int[temp.length];                //定义一个整型数组array

for(int i = 0; i< temp.length; i++){              //将字符串数组强制转化为整型数组

array[i] = Integer.parseInt(temp[i]);            //这种方法非常巧妙
}
SolutionMethod1 solution1 = new SolutionMethod1();
//solution1.quicksort(array, 0, array.length-1);
solution1.sortfun(array, 0, array.length-1);
}
}

 

 类似资料:
  • 题目链接 NowCoder 题目描述 五张牌,其中大小鬼为癞子,牌面为 0。判断这五张牌是否能组成顺子。 解题思路 // java public boolean isContinuous(int[] nums) { if (nums.length < 5) return false; Arrays.sort(nums); // 统计癞子数量 i

  • 一、题目 从扑克牌中随机抽5张牌,判断是不是一个顺子, 即这5张牌是不是连续的。2~10为数字本身, A为1。 J为11、Q为12、 为13。小王可以看成任意数字。 二、解题思路 我们可以把5张牌看成由5个数字组成的数组。大、小王是特殊的数字,我们不妨把它们都定义为0,这样就能和其他扑克牌区分开来了。 接下来我们分析怎样判断5个数字是不是连续的,最直观的方法是把数组排序。值得注意的是,由于0可以当

  • 本文向大家介绍写一个洗扑克牌的方法相关面试题,主要包含被问及写一个洗扑克牌的方法时的应答技巧和注意事项,需要的朋友参考一下 求教, 要比 更好吗?

  • 我试图根据等级和花色对一手扑克进行排序,但仍然没有完全排序,下面是代码,请注意花色是排序的,而不是等级 我的手在排序之前: 1:红桃之王2:四枚钻石3:七枚梅花4:梅花之王5:三枚红桃6:五枚钻石7:两枚梅花8:钻石之王9:四枚黑桃10:三枚钻石 排序后: 1:黑桃四枚2:红桃之王3:红桃三枚4:梅花两枚5:梅花之王6:梅花七枚7:钻石之王8:钻石五枚9:钻石四枚10:钻石三枚 卡对象 玩家对象

  • 问题内容: HTML是否区分大小写? 在一个示例中,我正在使用它说: 还是会有所不同(或根本没有)? 问题答案: 否,但是将HTML标记保持小写被认为是一种好习惯。

  • 问题内容: 我想知道,由于Clojure Compiler和UglifyJS不仅针对大小优化代码,而且还针对性能进行优化(尽管我认为大小是主要的优先事项),如果将我的node.js应用程序缩小了,它将运行得更快吗?我知道这可能取决于应用程序,但我通常会问这个问题。 问题答案: 在节点中,主要处理成本是I / O操作,而不是实际的JavaScript本身。因此,例如: 在这里,调用与被触发的回调之间