17.【加試題】由數(shù)組a生成數(shù)組b的方法描述如下:
1)將數(shù)組a中的n個元素依次分割出若干個數(shù)據(jù)塊,每個數(shù)據(jù)塊有m×m個元素,m最大值為8,最小值為2.分割時,按盡可能大的數(shù)據(jù)塊進行分割;
2)對每個分割出的數(shù)據(jù)塊用“方陣轉換法”進行轉換,每次轉換后得到的數(shù)據(jù)塊依次存儲在數(shù)據(jù)b中;
3)數(shù)組a分割后的剩余元素(個數(shù)小于4),直接依序存儲到數(shù)組b中。
例如n=140時,可依次分割出3個數(shù)據(jù)塊,元素的個數(shù)分別為64(8×8)、64(8×8)、9(3×3),剩余元素為3個。
“方陣轉換法”過程如下:將數(shù)據(jù)塊中m×m個元素按行序排列成一個數(shù)字方陣,從該數(shù)字方陣中按列序得到轉換后元素的次序。以3×3數(shù)據(jù)塊為例,轉換過程如圖所示:
小明依據(jù)上述描述設計了如下VB程序。請回答下列問題:
(1)當n=120時,分割出的第3個數(shù)據(jù)塊元素個數(shù)為
。
(2)請在橫線處填入合適的代碼。
Const n=120
Dim a(1To n) As Integer
Dim b(1To n) As Integer
Private Sub Command1_Click ( )
Dim m As Integer,i As Integer
Dim Start As Integer'當前未分割數(shù)據(jù)的第1個元素下標
Dim Left As Integer'當前未分割數(shù)據(jù)的個數(shù)
Dim pa As Integer'數(shù)組a的下標
Dim pb As Integer'數(shù)組b的下標
'讀取n個轉換前的數(shù)據(jù),依次存儲到a(1)、a(2)、…a(n)中,代碼略
m=8
Start=1
Left=n
Do While Left>3
If Left<m*m Then
m=
Else
pa=Start
pb=Start
For i=1To m*m
b(pb)=a(pa)
pb=pb+1
If i Mod m=0Then
Else
pa=pa+m
End If
Next i
Start=Start+m*m
End If
Loop
For i=Start To n
b(i)=a(i)
Next i
'依次輸出轉換后數(shù)據(jù)b(1)、b(2)、…b(n)中,代碼略
End Sub。