当前位置: 高中信息技术 / 综合题
  • 1. (2021·义乌模拟) 一张骨牌由上下两行共四个格子构成,每个格子有一个1到6之间的数字。现在一共有5张骨牌,从左到右排成一排,定义每张骨牌的差值为:骨牌第一行的数字和减去第二行的数字和;5张骨牌的差值为:每张骨牌的差值和的绝对值。

    如图a中,5张骨牌的差值为:|(3+3-4-4)+(6+3-2-5)+(2+3-4-5)+(1+5-3-3)+(1+1-1-1)|=4。

    每张骨牌都可以顺时针旋转90度,效果如图b所示。现在最多可以选择其中一张骨牌进行旋转,使得旋转后的骨牌差值变小。求一种旋转方案,并输出骨牌差值的最小值。

    图a

    图b

    编写VB程序,实现上述功能。运行程序,在文本框Text1中依次输入5张骨牌上的数字,单击“计算”按钮Command1,在文本框Text2、Text3、Text4中输出结果。程序运行界面如图b所示。

    1. (1) 若图a中第1张骨牌的数字修改为,1、2、6、6,则骨牌差值的最小值为
    2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

      Dim a(1 To 20) As Integer     ‘依次存储5张骨牌上的数字

      Dim d(1 To 5) As Integer       ‘依次存储5张骨牌,上下两行的差值

      Const n = 5

      Private Sub Form_Load()

      '从文本框Text1读取5张骨牌上的数字,依次存入数组a

      'a(1)~a(4)依次存储第一张骨牌从左到右从上到下四个数字

      'a(5)到a(20)依次类推

      '代码略

      End Sub

      Private Sub Command1_Click()

          Dim i As Integer, up As Integer, down As Integer, t As Integer, k As Integer

          Dim id As Integer, times As Integer, x As Integer, ans As Integer

          For i = 1 To n

              up = a(4 * i - 3) + a(4 * i - 2)

              down = a(4 * i - 1) + a(4 * i)

              d(i) = up - down

              t = t + d(i)

          Next i

          id = 0 : times = 0

          ans =

          If ans <> 0 Then

              k = 1

              Do While k <= n

                  For x = 1 To 3

                      temp =

                      If temp < ans Then

                          ans = temp

                          id = k

                          

                      End If

                      If temp = 0 Then Exit Do

                  Next x

                  k = k + 1

              Loop

          End If

          Text2.Text = CStr(id)

          Text3.Text = CStr(times)

          Text4.Text = CStr(ans)

      End Sub

      Function turn(ByVal k As Integer, ByVal x As Integer) As Integer

          ‘求将第k张骨牌,顺时针旋转x次后,上下两行的差值,代码略

      End Function

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