美文网首页
从一副卡牌中随机抽取五张牌,且不能重复

从一副卡牌中随机抽取五张牌,且不能重复

作者: zdxhxh | 来源:发表于2020-04-11 22:30 被阅读0次

导语

这是我大四时去面试前端实习工作的时候,某家公司给的笔试题。虽然是挂了,但是也学到了很多。

题目如标题,实际答案在动物书<<重构Javascript>>中,当时我也没有写过有关卡牌的算法,就随便写了一个从A-K的13张牌的卡组抽取5张出来。毕竟没领会这道题的题意。

时隔一年,写一下这道题目。

卡牌

一副卡牌有 1~K 13张,每张卡牌有四种颜色,分别是 H、S、D、C,我们用 2-H 表示一张牌,则一副完整的卡牌数组应该有52张牌

可以得到卡牌数组方法为

function buildCards(){
  const values = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"];
  const suits = ["H", "S", "D", "C"];
  const cards = []
  values.forEach(value=>{
    suits.forEach(suit=>{
      cards.push(`${value}-${suit}`)
    })
  })
  return cards
}

接下来,我们写获取随机5张卡牌的方法

function randomCards() {
  const cardArray = buildCards()
  const cards = []
  const deckSize = cardArray.length
  cards.push(cardArray.splice(Math.floor(Math.random() *deckSize),1)[0])
  cards.push(cardArray.splice(Math.floor(Math.random() *deckSize),1)[0])
  cards.push(cardArray.splice(Math.floor(Math.random() *deckSize),1)[0])
  cards.push(cardArray.splice(Math.floor(Math.random() *deckSize),1)[0])
  cards.push(cardArray.splice(Math.floor(Math.random() *deckSize),1)[0])
  return cards 
}

注意 : 这里使用了splice方法切割数组,确保随机手牌集合的互异性。

Math.random

这个是一个重要的数学方法,用于获取 0~1的随机数,以下是一个常常考的笔试题。

用 js 实现随机选取 10–100 之间的 10 个数字, 存入一个数组, 并排序。

Math.random() // 返回0~1的随机数
Math.random() * 5 // 则返回 0~5的随机数
// 要想获取某个返回的随机数,可以
function getRandom(x,y){
  return Math.floor( Math.random() * (y-x+1) + x)
}

for(var i=0; i<10; i++){
  var result= getRandom(10,100);
  iArray.push(result);
} 
iArray.sort();

相关文章

  • 从一副卡牌中随机抽取五张牌,且不能重复

    导语 这是我大四时去面试前端实习工作的时候,某家公司给的笔试题。虽然是挂了,但是也学到了很多。 题目如标题,实际答...

  • 用OH卡牌探索生命之旅

    “生命之旅”探索: 第一步,凭直觉在孩童卡中随机抽取一张牌代表“我”。 第二步,同样凭直觉在经典卡中依次抽取四张牌...

  • python经典24点游戏

    游戏规则:从一副扑克牌中抽取4张牌,对4张牌使用加减乘除中的任何方法使计算结果为24,例如(((4-2)+6)*3...

  • Python实现扑克24点 ,从此我就没输过。

    24点游戏玩法为:从一副扑克中抽取4张牌,对4张牌使用加减乘除中的任何方法,使计算结果为24。 我们用Python...

  • Python实现扑克24点 ,从此我就没输过。

    24点游戏玩法为:从一副扑克中抽取4张牌,对4张牌使用加减乘除中的任何方法,使计算结果为24。 我们用Python...

  • 金钱卡点

    OH卡环节,从卡牌里发现自己的金钱卡点 第一张牌抽取代表你自己 第二张牌抽取代表你的金钱 第三张牌抽取代表你与金钱...

  • 二、一副扑克牌平均分给4个人

    思路:首先生成一副扑克牌;打乱牌;随机发放。

  • “珍爱卡”体验分享

    坐标:华师 自我卡牌分享 1.抽取一张卡牌时,我抽到“礼物”这张卡牌。 当时第一眼看到这张卡牌,内心顿时很温暖,...

  • 基于JAVA的实现的24点游戏

    2.1 题目说明 一副牌中抽去大小王剩下52张(如果初练也可只用1-10者40张牌),任意抽取4张牌(称牌组),用...

  • 剑指offer 面试题44:扑克牌的顺子

    题目:从扑克牌中随机抽取5张牌,判断是不是一个顺子,即这5张牌是不是连续的。大小王可以看成任意数字 解法分析:问题...

网友评论

      本文标题:从一副卡牌中随机抽取五张牌,且不能重复

      本文链接:https://www.haomeiwen.com/subject/xzipmhtx.html