VB_Python代码对照算法百题(006)
VB代码:
(2016年4月_浙江)17.某数据压缩方法描述如下:
1)原始数据中,某数不为0且相邻无重复,压缩数据用该数据表示;
2)原始数据中,某数为0且相邻无重复,压缩数据用两个数表示,第1个为0,第2个为0;
3)原始数据中,某数据相邻有重复,压缩数据用3个数表示:第1个为0,第2个为重复数的个数,第3个为该数本身;
根据上述压缩方法,对应的解压缩方法示例如图a所示。
图a
小明编写了一个解压缩VB程序,功能如下:窗体加载时,自动读取压缩数据,依次存储在数组元素a(1)、a(2)、a(3)……中,压缩数据的个数存储在变量n中,压缩数据显示在文本框Text1中。单击“解压缩”按钮Command1,程序对压缩数据依次进行解压缩处理,解压缩数据显示在文本框Text2中。程序运行界面如图b所示。
图b
(1)如果压缩数据为“23,0,21,66,0,0,77,0,5,0”,则解压缩数据的个数是。
(2)实现上述功能的VB程序如下。请在划线处填入合适代码。
Dim a(1 To 100) AsInteger '存储压缩数据,最大处理个数为100
Dim b(1 To 1000) As Integer'存储解压缩数据,最大处理个数为1000
Dim n As Integer '存储压缩数据的个数
Private SubForm_Load()
'压缩数据由上述压缩方法生成
'本过程用于读取压缩数据并存储在数组a,压缩数据个数存储在变量n中
'代码略
End Sub
Private SubCommand1_Click()
Dim pa As Integer '存储压缩数组当前处理位置
Dim pb As Integer '存储解压缩数组当前处理位置
Dim firstdata As Integer,count As Integer, i As Integer
pa = 1: pb = 1
Do While pa
firstdata = a(pa)
If firstdata 0 Then'示例1情况处理
b(pb) = firstdata
pa = pa + 1: pb = pb + 1
Else
count = a(pa + 1)
If count = 0 Then'示例2情况处理
b(pb) = 0
pa =①: pb = pb + 1
Else'示例3情况处理
For i = 1 To count
②
Next i
pa = pa + 3: pb = pb + count
End If
End If
Loop
Text2.Text =Str(b(1))
For i = 2 To③
Text2.Text = Text2.Text + "," +Str(b(i))
Next i
End Sub
参考答案:
(1)29
(2)①pa+2②b(pb+i-1)=a(pa+2)③pb-1
Python代码:
a=[25,0,0,0,7,78]
b=[]
pa = 0
##pb = 0
while pa
firstdata = a[pa]
if firstdata != 0:
b.append(firstdata)
pa = pa + 1
## pb = pb + 1
else:
count = a[pa + 1]
if count == 0:
b.append(0)
pa = pa + 2
## pb = pb + 1
else:
pa=pa+1
for i in range(a[pa]):
b.append(a[pa+1])
## print(b)
print('解压缩数据为:' )
print(b)
Python代码运行结果:
解压缩数据为:
[25, 0, 78, 78, 78,78, 78, 78, 78]
==================
领取专属 10元无门槛券
私享最新 技术干货