①先出顺子牌型(顺子指连续的 5 张及以上的牌,如 345678,顺子最小从 3 开始,最大到 A),若有多个顺子,先长后短,长度相同按从小到大顺序出;
②再按三带一牌型(3 张相同的牌带一张单牌)、对子牌型(2 张相同)、单张牌型的顺
序出牌,同一牌型从小到大出;
③最后出炸弹,若有多个炸弹,从小到大出。
设计以下VB程序,牌“10”用0代替,比较两组出牌次数,界面如图所示,请回答下列问题。
Const s = "34567890JQKA2" '用 0 代替牌 10
Dim s1 As String, s2 As String 's1 存储 A 组牌,s2 存储 B 组牌
Dim b(1 To 18)As String
'数组 b 存储各类牌型,其中 b(1)到 b(4)可存储炸弹牌型,b(5)到 b(18)存储其他牌型
Private Sub Command1_Click()
'随机产生 A 组和 B 组牌分别在文本框 Text1、Text2 中显示,代码略
End Sub
Sub arrange(st As String) '整理牌型的过程
Dim a(3 To 15)As Integer,iAs Integer
Dim j As Integer, tAs Integer,n As Integer
Dim k As Integer, max As Integer, last As Integer
Dim saAs String, stemAs String, flag As Boolean
'数组元素 a(3)到 a(15)分别存储牌 3~JQKA2 的张数
'代码略
t = 17
For i = 1 To 18
b(i) = ""
Next i
Do While t > 0
n = 0
For i = 3 To 15 '寻找炸弹牌型,若有则存储到数组 b 中
If a(i) = 4 Then
n = n + 1
b(n) = stem + stem + stem + stem
a(i) = 0: t = t - 4
End If
Next i
flag = True
Do While flag '寻找顺子牌型,若有则存储到数组 b 中
flag = False: max = 0: k = 1
For i = 4 To 14
If a(i-1)>=1 And a(i)>= 1 Then
k = k + 1
If k > max Then
max = k
last = i + 1
End If
Else
k = 1
End If
Next i
If max >= 5 Then
flag = True: sa = ""
For j = last - max + 1 To last
stem = Mid(s, j - 3, 1)
sa = sa + stem + " "
Next j
n = n + 1:b(n) = sa
t = t - max
End If
Loop
'寻找并存储三带一、对子、单张牌型,代码略
Loop
End Sub
Private Sub Command2_Click()
Dim count1 As Integer 'count1 统计 A 组出牌次数
Dim count2 As Integer 'count2 统计 B 组出牌次数
Call arrange(s1)
'在 List1 中显示 A 组出的牌型,统计出牌次数,代码略
Call arrange(s2)
'在 List2 中显示 B 组出的牌型,统计出牌次数,代码略
If count2 > count1 Then
Label3.Caption = "A 组出牌次数小于 B 组"
ElseIf count2 = count1 Then
Label3.Caption = "A 组出牌次数等于 B 组"
Else
Label3.Caption = "A 组出牌次数大于 B 组"
End If
End Sub
|
编码中位 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
|
对位信息 |
p1 |
p2 |
b1 |
p3 |
b2 |
b3 |
b4 |
校验的方式如下,求校验值g1、g2、g3:
g1 = p1 Xor b1 Xor b2 Xor b4
g2 = p2 Xor b1 Xor b3 Xor b4
g3 = p3 Xor b2 Xor b3 Xor b4
其中Xor 为异或运算,规则是:0 Xor 0 =0,0 Xor 1 =1,1 Xor 0 =1,1 Xor 1 =0,
p1 Xor b1 是将p1、b1 转换为二进制后按位进行异或运算,如7 Xor 12 的结果为11。
⑴若计算得到的校验值g1、g2、g3均为0,说明校验正确,数据无错误。例如:若7位编码为1101001,计算校验值g1、g2、g3值均为0,验证正确。
⑵若校验值g1、g2、g3不全为0,说明数据有错,出错位置为g3g2g1(二进制数表示),纠错的方法是对错误的位进行取反,即“0”变“1”,“1”变“0”。例如:若7位编码为1111001,计算校验值g1=1、g2=1、g3=0,不全为0,说明数据有错,错误位置在011(二进制数)位,即第3位,原位置上“1”应为“0”,正确编码为1101001。
小明为此编写了VB程序,程序运行时,在文本框Text1中输入编码值,单击“校验”
按钮Command1后,在文本框Text2中输出运行结果,如图所示。

实现上述功能的VB程序如下,请回答下列问题:
Function check(s As String) As Integer
Dim i As Integer g1 As Integer, g2 As Integer, g3 As Integer
Dim c(1 To 7) As Integer
For i = 1 To 7
c(i) = Val(Mid(s, i, 1))
Next i
g1 = c(1) Xor c(3) Xor c(5) Xor c(7)
g2 = c(2) Xor c(3) Xor c(6) Xor c(7)
g3 = c(4) Xor c(5) Xor c(6) Xor c(7)
If g1 + g2 + g3 = 0 Then check = 0 Else check =
End Function
Private Sub Command1_Click()
Dim i As Integer, m As Integer, Outs As String
m =
If m = 0 Then
Text2.Text = "验证正确,数据无错误"
Else
For i = 1 To 7
If i = m Then
Outs = Outs + Chr( Asc(Mid(Text1.Text, i, 1)) Xor )
Else
Outs = Outs + Mid(Text1.Text, i, 1)
End If
Next i
Text2.Text = "第" + Str(m) + "位上数据有错误,正确编码应为:" + Outs
End If
End Sub
s=0 : i=1
Do While ![]()
s=s+i
i=i+1
Loop
执行该程序段后,变量s的值等于10,则程序方框处的语句是( )

编写VB程序,功能如下:在文本框Text1中输入n的值,单击“生成”按钮Command1,
生成网格和随机的挡板,并输出。然后单击“开始”按钮Command2,在文本框Text2中显示小球进入网格后的运动路径。程序中利用数组a存储网格的状态,其中“/”与“\”两种字符表示两种朝向的挡板。程序运行界面如图c所示。

图 c
请回答下列问题:
Dim n As Integer
Dim a(0 To 100) As String
Private Sub Command1_Click() '生成网格和挡板
n = Val(Text1.Text)
'生成 n*n 的网格和随机的挡板,并通过图形控件输出,代码略
End Sub
Private Sub Command2_Click()
Dim ans As String, pre As String
Dim cur As Integer
cur = 1: : ans = ""
Do While cur >= 1 And cur <= n * n
ans = ans + Str(cur) + "→"
If pre = "左" And a(cur) = "\" Or pre = "右" And a(cur) = "/" Then
cur = cur + n: pre = "上"
ElseIf Then
cur = cur - n: pre = "下"
ElseIf pre = "上" And a(cur) = "\" Or pre = "下" And a(cur) = "/" Then
If cur Mod n = 0 Then
Exit Do
Else
cur = cur + 1: pre = "左"
End If
ElseIf pre = "上" And a(cur) = "/" Or pre = "下" And a(cur) = "\" Then
If
Then
Exit Do
Else
cur = cur - 1: pre = "右"
End If
End If
Loop
Text2.Text = ans + "离开"
End Sub
s=s%6
print(s)
程序运行后,键盘输入33,其输出结果为 ( )
经过扫描后得到的数据结果为:
| 57 | 45 | 0 | 23 | 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | -30 | 1 | 0 | 0 | 0 | 0 | 0 |
| -16 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
“57,45,0,0,0,0,23,0,-30,-16,0,0,1,0,0,0,0,…,0,0”,数据元素个数为64个。进一步经过压缩后,最终得到行程编码:“57, 1, 45, 1, 0, 4, 23, 1, 0, 1,-30, 1,-16, 1, 0, 2, 1, 1, 0, 51”,数据元素个数为20个。
Dim a(0 To 1000) As Integer '存储原矩阵数据,按行优先存储
Dim b(0 To 1000) As Integer '存储Z形扫描后数据
Dim c(0 To 1000) As Integer '存储行程编码压缩后数据
Dim n As Integer
‘矩阵导入代码略,以行优先存储在a数组中,如例子中数据存储顺序为“57,45,0,23,0,0…”
Private Sub Command2_Click()
Dim choice As Integer ' 1:向右移动 ;2:向右上移动;3向下移动 4向左下移动
Dim row As Integer, col As Integer, i As Integer, j As Integer
Dim pre As Integer, count As Integer
choice = 1: row = 0: col = 0: i = 0
Do While (row <> n - 1 Or col <> n - 1)
b(i) = a(row * n + col):i = i + 1
If choice = 1 Then
If row = 0 Then choice = 4 Else choice = 2
ElseIf choice = 2 Then
row = row - 1: col = col + 1
If Then
choice = 1
ElseIf col = n - 1 Then
choice = 3
End If
ElseIf choice = 3 Then
row = row + 1
If col = 0 Then choice = 2 Else choice = 4
ElseIf choice = 4 Then
row = row + 1: col = col - 1
If row = n - 1 Then
choice = 1
ElseIf col = 0 Then
choice = 3
End If
End If
Loop
b(i) = a(n * n - 1):j = 0: pre = b(0): count = 0
For i = 0 To n * n - 1 '输出Z形序列,并进行行程压缩
If pre = b(i) Then
count = count + 1
Else
c(j) = pre: c(j + 1) = count
pre = b(i):j = j + 2
End If
Next i
c(j) = pre: c(j + 1) = count
Text1.Text = ""
For i = 0 To j + 1
Text1.Text = Text1.Text + Str(c(i)) + ","
Next i
End Sub
For i = 1 To 8
a(i) = Int(Rnd * 10) * 2 + 1
Next i
For i = 1 To 3
For j = 1 To 8 - i * 2
If a(j) > a(j + 2) Then
t = a(j): a(j) = a(j + 2): a(j + 2) = t
End If
Next j
Next i
执行该程序段后,在下列选项中,a(1)~a(8)各元素可能的值是( )
amin = a(1): amax = a(1)
i = 2: j = 9
Do While i <= j
If a(i) > a(j) Then
Else
End If
i = i + 1: j = j - 1
Loop
Text1.Text = Str(amin) + "," + Str(amax)
上述程序段中方框处可选语句为:
①If a(j) > amax Then amax = a(j)
②If a(j) < amin Then amin = a(j)
③If a(i) < amin Then amin = a(i)
④If a(i) > amax Then amax = a(i)
则方框处语句依次可为( )
s=0
for i in range(1,11,2):
s=s+i
print(s)
该程序段运行后,s的值为。
For k=100 To 500
x=k
z =0
Do While x> 0
Loop
If z=k Then
List1.AddItem Str(k)
End If
Next k
上述程序段中方框处可选语句为:
①x=x\10 ②y=xMod10
③z=z+10*y ④z=10*z+y
则(1)(2)(3)处语句依次为( )
BookInfo0=("ID0010230",15.68,36)
BookInfo1=("ID2315937",20,2)
BookSet={BookInfo0,BookInfo1}
t=0
For i in BookSet:
t+=i[1]*i[2]
print(t)
t(1) = 1: t(2) = 1
For i = 3 To 5
t(i) = t(i - 1) + t(i -2)
Next i
Key =13
i=1: j=8: k=6
Do While i <=j
m = i+t(k-1) ‘①
If Key = d ( m ) Then Exit Do ‘Exit Do表示退出循环
If d(m) > Key Then
j= m - 1
k=k-1
Else
i = m + 1
k=k-2
End If
Loop
运行该程序段后,①处的赋值语句共执行( )
x=0
while(x!=4): #当x=!4时,执行循环
print('1. 添加订单')
print('2. 发货')
print('3. 查看订单列表')
print('4. 退出')
x=int(input("输入你的选择:")) #输入选择项
if 1 :
y=input("输入订单编号:") #输入订单编号
2 #在列表listque中添加订单号
elif x==2:
3 #如果订单列表为空
print("订单列表为空")
else:
print("发货单号:"+listque.pop(0))
elif x==3:
print("等待发货:",listque) #查询列表listque中的订单号
print()
input("运行完毕,请按回车键退出...")
此列表,定义的是( )列表。(从“空、非空” 里选填); 补充划线1/2/3处的内容。
L=[8, 10, 9, 14, 13, 4, 9, 13, 10]
k=int(input('请输入 k 值:'))
j=0
for i in range(8):
if L[i]<=k:
L[j]=L[i]
j=j+1
print(L[:j])
i =1
Do While i<=5
a(i)= Int(Rnd*10)*2 + 1
If Not flag(a(i)) Then flag(a(i))=True
i= i + 1
Loop
已知数组flag各元素的初值为False,运行以上程序段程序,数组元素a(1)到a(5)的值可能为( )