VB_Python代码对照算法百题(006)

VB_Python代码对照算法百题(006)

VB代码:

(2016年4月_浙江)17.某数据压缩方法描述如下:

1)原始数据中,某数不为0且相邻无重复,压缩数据用该数据表示;

2)原始数据中,某数为0且相邻无重复,压缩数据用两个数表示,第1个为0,第2个为0;

3)原始数据中,某数据相邻有重复,压缩数据用3个数表示:第1个为0,第2个为重复数的个数,第3个为该数本身;

根据上述压缩方法,对应的解压缩方法示例如图a所示。

VB_Python代码对照算法百题(006)

图a

小明编写了一个解压缩VB程序,功能如下:窗体加载时,自动读取压缩数据,依次存储在数组元素a(1)、a(2)、a(3)……中,压缩数据的个数存储在变量n中,压缩数据显示在文本框Text1中。单击“解压缩”按钮Command1,程序对压缩数据依次进行解压缩处理,解压缩数据显示在文本框Text2中。程序运行界面如图b所示。

VB_Python代码对照算法百题(006)

图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 <= n

   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+2b(pb+i-1)=a(pa+2)pb-1

Python代码:

a=[25,0,0,0,7,78]

b=[]

pa = 0

##pb = 0

while pa<4:

    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]

>>>