随机打乱数组算法-扑克洗牌

Option Explicit
Dim Poker(53) As Long
Private Sub Command1_Click()
    Dim i&, j&, n&
    Print "---初始化扑克---"
    For i = 65 To 68    ‘花色
        For j = 1 To 13 ‘点数
            Poker(n) = CLng("&h" & Chr(i) & Hex(j))
            n = n + 1
        Next j
    Next i
    ‘大小王
    Poker(52) = &HF1: Poker(53) = &HF2
    Call ShowPoker
End Sub
Private Sub Command2_Click()
    Dim i&, j&, r&, m&
    Print "---洗牌---"
    j = 53
    For i = 0 To 53
        r = Rnd * j
        m = Poker(j)
        Poker(j) = Poker(r)
        Poker(r) = m
        j = j - 1
    Next i
    Call ShowPoker
End Sub
Private Sub ShowPoker()
    Dim i&, j&
    For i = 0 To 53
        j = j + 1
        If Poker(i) >= &HA1 And Poker(i) <= &HAD Then
            Me.ForeColor = &H80FF&
        ElseIf Poker(i) >= &HB1 And Poker(i) <= &HBD Then
            Me.ForeColor = &HC000&
        ElseIf Poker(i) >= &HC1 And Poker(i) <= &HCD Then
            Me.ForeColor = vbBlue
        ElseIf Poker(i) >= &HD1 And Poker(i) <= &HDD Then
            Me.ForeColor = &HFF00FF
        Else
            Me.ForeColor = &HFF&
        End If
        Print Hex(Poker(i)) & " ";
        If j Mod 13 = 0 Then Print
    Next i
    Print
    Print
End Sub
时间: 2024-11-16 14:04:21

随机打乱数组算法-扑克洗牌的相关文章

简单说说随机打乱数组的方法

原文链接:http://www.gbtags.com/gb/share/5646.htm 把一个数组随机打乱这个需求来源可能就是“洗牌”,所以我们常常称之为洗牌问题.这个问题实现并不复杂,有不少方法可以完成.与其他算法不同,洗牌问题不仅追求速度,还要求“洗得足够开”.今天只想写篇短的,只分享两种比较有代码性的洗牌方法.至于这些方法能不能真正将数组随机打乱,我们下次再讲. 方法一,随机排序法: function shuffle(array) { array.sort(function() { re

一步一步写算法(洗牌算法)

[ 声明:版权所有所有,欢迎转载.不用于商业用途. 联系我们:feixiaoxing @163.com] 扑克洗牌是我们的生命更喜欢玩游戏. 么我们有没有什么办法自己设计一个扑克牌洗牌的方法呢?在c执行库其中有一个随机函数rand,它能够生成0~32767之间的随意数.那么有没有可能利用这么一个函数对我们扑克牌进行随即洗牌呢? 在这里我抛砖引玉一下,谈一谈自己眼下已经看到的两个算法.欢迎朋友们谈一谈其它的方法. (1)全局洗牌法 过程例如以下所看到的: a)首先生成一个数组,大小为54,初始化为

【每日算法】洗牌算法

洗牌算法 给定一个n个数的序列,设计一个算法将其随机打乱,保证每个数出现在任意一个位置的概率相同(也就是说在n!个的排列中,每一个排列出现的概率相同). 朴素的做法: 假设输入为数组num[length]. 随机选一个数,放到num[0]中,再随机选数,如果该数已经选过,重新选,直到该数未选过时放入num[1]中,以此类推,直到所有的数都选出来,很明显,这种选法一共有n!中可能,每种可能出现的概率都相同. 但是该做法效率不高,因为选过的数再选将耗费大量时间. 改进的洗牌算法: 基于以上算法的缺陷

算法之洗牌算法

洗牌算法是我们常见的随机问题,在玩游戏.随机排序时经常会碰到,一个最常用的地方就是组卷.它可以抽象成这样:M以内的所有自然数的随机顺序数组. package com.math; import java.util.Random; /** * @author summer * */ public class Shuffle { static final int[] a = new int[54]; static Random rnd = new Random(); static{ for(int i

C# ---- 算法之洗牌算法

作为一名学数学的渣渣,其实对各种算法还是有兴趣的.有时候看到某位大神写的精妙的算法真真是比一场演唱会都精彩~~ 洗牌算法常用于像是连连看,爱消除这种小游戏.目的就在于打乱既定顺序. 我目前喜欢并觉得效率高易理解的洗牌算法有两种实现方式.下面一一陈述. 本博在csdn看到某位大神写的,随手摘抄了. 第一种是用取余的方法随机取值 private void random1(int[] array,int length) { int index; int value; int wangsai; if (

4月6日--关于算法数的练习题--扑克洗牌

扑克 1.定义一个数组,存放1-52(分别表示52张扑克,不含大.小王)其中1表示黑桃A,2表示黑桃2...,13表示 黑桃K,14表示红桃A......) 2.随机排列该数组 3.再将牌平均分给4个玩家(分成4个数组,按照发牌规则) 4.排序输出每个玩家的扑克(先按照花色:黑桃.红桃.梅花,方块;再按照大小) <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&q

随机打乱数组元素

把数组内的元素随机打乱,重新进行排列  C#版: 1 public static void Shuffle<T>(T[] array) 2 { 3 Random random = new Random(); 4 5 for (int i = 0; i < 10; i++) 6 { 7 int idx = random.Next(i, 10); 8 9 //swap elements 10 T tmp = array[i]; 11 array[i] = array[idx]; 12 arr

php保留键随机打乱数组顺序

最近遇到一个需求,把一个数组随机打乱顺序,我们可以用php的shuffle函数,但是这个函数会把数组的键清空建立新的键,那么我们若想保留键只需要利用shuffle函数再做一下处理就可以了.可以自定义一个函数. <?php function retain_key_shuffle(array &$arr){ if (!empty($arr)) { $key = array_keys($arr); shuffle($key); foreach ($key as $value) { $arr2[$v

随机打乱数组顺序之随机洗牌算法

var shuffleArray = function(array) { var currentIndex = array.length; var temporary; var toIndex; while (currentIndex) { toIndex = Math.floor(Math.random() * currentIndex--); temporary = array[currentIndex]; array[currentIndex] = array[toIndex]; arra