请各位大哥大姐们,叔叔阿姨们,帅哥美女们帮我用vb编程下面的“魔术师的秘密”,感激不尽,急用~~!

在一次晚会上,一位魔术师掏出一叠扑克牌,取出其中13张黑桃,预先洗好后,把牌面朝下,对观众说:“我不看牌,只数一数就能知道每张牌是什么”魔术师口中念一,将第一张牌翻过来看正好是A,魔术师将黑桃A放在桌子上,继续数手里的余牌,第二次数1,2,将第一张牌放到这叠牌的下面,将第二张牌翻开,正好是黑桃2,也把它放在桌子上,第三次1,2,3,前面二张牌放在这叠牌的下面,取出第三张牌,正好是黑桃3,这样一次将13张牌翻出,准确无误。现在的问题是,魔术师手中牌的原始顺序是怎样的?

 Sub xxx()
    Dim i As Integer, n As Integer, p As Integer, m As Integer
    Dim arr(1 To 13) As Integer
    Dim brr(1 To 54) As Boolean
    arr(1) = 1
    p = 0  '用来定位开始记牌的位置
    For i = 1 To 13
        n = 0
        m = 1
        Do While m < 55
            If p + m > 54 Then p = 0: m = 1   '当54张牌数完,重新回到第一张牌
            If brr(p + m) = False Then   '判断这张牌是否是已经挑出来的牌,如果是已经挑出来的牌,则跳过
                n = n + 1    'n用来数第几张牌
                If n = i Then
                    arr(i) = p + m     '定位每张黑桃i的位置
                    brr(p + m) = True  '已经挑出来的牌,则标记为True
                    p = p + m  '将定位变量p,定位到p+m
                    Exit Do    '退出Do循环
                End If
            End If
            m = m + 1
        Loop
    Next
    
    Dim s As String
    s = "牌号 - " & "位置" & Chr(10)
    For m = 1 To 13
        s = s & "  " & m & "  -  " & arr(m) & Chr(10)
    Next
    MsgBox s
End Sub

呵呵,我的答案是:

A   2   3   4   5   6   7   8   9   10   J   Q   K

1   3   6  10  15 21 28 36 45  2   17  31 46

顺过来就是:A,10,2,3,4,5,J,6,7,Q,8,9,K

1,8,2...什么的顺序肯定是错的,1+2+3+4...+7=28,一副牌有54张,数到7的时候数了28张牌,所以数第8张牌的时候,是第36张牌,所以,怎么可能黑桃8跑到黑桃A和黑桃2之间呢!?

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-05-21
原始顺序是:1.8.2.5.10.3.12.11.9.4.7.6.13 希望采纳追问

我要的是用vb编程的过程,不是结果。

第2个回答  2013-05-21
红桃方块梅花黑桃黑桃最上或者最下,并依次排好,其实他并没有洗乱牌
相似回答