当前位置: 高中信息技术 / 综合题
  • 1. (2020高三上·嘉兴月考) 某卡牌共有52张牌,分黑桃,红桃,梅花,方块4种花色,每种花色13张(编号为1~13),花色分别用1,2,3,4表示。将这卡牌打乱后,从中每次摸1张牌,同种花色的牌放起,在每种花色均有3张牌时结束摸牌,然后按花色编号从小到大展示摸到的卡牌。

    摸牌规则:

    A.当某花色牌不足3张,则记录摸到的牌,继续摸下一张牌

    B.当某花色的牌超过3张时,若摸到的卡牌点数大于本花色中已有卡牌点数的最小值,则替换本花色中点数最小的卡牌,否则,弃置摸到的牌。继续下一-张摸牌

    C.当所有花色的牌均为3张时结束摸牌。然后按花色编号从小到大展示摸到的卡牌

    例如:在某次摸牌后的卡牌如下表所示:

    花色

    黑桃

    红桃

    梅花

    方块

    序号

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    点数

    7

    5

    12

    11

    3

    8

    7

    5

     

    8

    5

    3

    1)当下一次摸到“黑桃4”的牌时,4小于已摸到的[7,5,12],弃置摸到的牌,继续摸牌

    2)当摸到“红桃9”的牌时,9大于已摸到的[11,3,8]的最小值3,红桃更新为[11,9,8],继续摸牌

    3)当摸到“梅花9”的牌时,梅花点数更新为[7,5,9],达到所有花色的牌均为3张的目标,结束摸牌。

    模拟此过程编写VB程序,程序运行界面如下图,单击“展示摸到的卡牌”按钮开始摸牌,满足条件时,在列表框中展示摸到的卡牌。

    1. (1) 在如表中所示卡牌状态下,连续2次攒牌为“方块4”,“方块7”后,方块卡牌点数更新为(填点数,逗号分隔)
    2. (2) 实现上述功能的VB程序如下,请在划线处填入合适代码。

      Const n = 52

      Dim hs(1 To n) As Integer'存储每张卡牌的花色

      Dim num(1 To n) As Integer'存储每张卡牌的点数

      Din class(1 To 4) As Integer '存储每种花色卡牌的存储位置

      Dim record(1 To 12) As Integer

      Private Sub Form _Load()

          '读取打乱的卡牌中每张卡牌的花色、点数数据,存入数组hs, num中,代码略

      End Sub

      Private Sub Command1_ _Click()

          Dim k As Integer, i As Integer, P As Integer

          Dim flag As Boolean

          flag = True

          For i=1 To 4

              class(i) =     '计算每种花色卡牌存储的起始位置

          Next i

          i=1

          Do while i<=n And flag=True

              k = hs(i)

              If class(k) > k* 3 Then

                  p = pos(i)

                  If p < 0 Then

                      

                  End If

              Else

                  record(class(k)) = i

                  class(k) = class(k) + 1

                  If class() =4 And class(2) =7 And class(3)=10 And clas(4)= 13 Then

                      flag= False

                  End If

              End If

              i=i+1

          Loop

          List1.AddItem “”&“花色”&“”&“点数”

          For i =1 To 12

              List1. AddItem“”& hs(record(i)) &“”& num(record(i))

          Next i

      End Sub

      Function pos(t As Integer) As Integer    '返回点数最小卡牌位置

          Dim min As Integer

          m= (hs(t)-1)*3+1

          min= m

          If num(record(min)) > num(record(m+ 1)) Then min=m+ 1

          If num (record(min)) > num(record(m+ 2)) Then min=m+ 2

          If  Then

              pos= 0

          Else

              pos=min

          End If

      End Function

微信扫码预览、分享更方便