题目

一张骨牌由上下两行共四个格子构成,每个格子有一个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) 若图a中第1张骨牌的数字修改为,1、2、6、6,则骨牌差值的最小值为。 (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 答案: 【1】1 【1】Abs(t)【2】Abs(t + turn(k, x) - d(k))【3】times = x
信息技术 试题推荐