VB_Python代码对照算法百题(015)
VB代码: (2017年11月浙江)17.由数组a生成数组b的方法描述如下:
1) 将数组a中的n个元素依次分割出若干个数据块,每个数据块有m×m个元素,m最大值为8,最小值为2。分割时,按尽可能大的数据块进行分割;
2) 对每个分割出的数据块用“方阵转换法”进行转换,每次转换后得到的数据块依次存储在数据b中;
3) 数组a分割后的剩余元素(个数小于4),直接依序存储到数组b中。
例如n=140时,可依次分割出3个数据块,元素的个数分别为64(8×8)、64(8×8)、9(3×3),剩余元素为3个。
“方阵转换法”过程如下:将数据块中m×m个元素按行序排列成一个数字方阵,从该数字方阵中按列序得到转换后元素的次序。以3×3数据块为例,转换过程如下图所示:
小明依据上述描述设计了如下VB程序。请回答下列问题:
(1)当n=120时,分割出的第3个数据块元素个数为 。
(2)请在划线处填入合适的代码。
Const n = 120
Dim a(1 To n) As Integer
Dim b(1 To n) As Integer
Private Sub Command1Click()
Dim m As Integer, i As Integer
Dim Start As Integer ‘当前未分割数据的第1个元素下标
Dim Left As Integer ‘当前未分割数据的个数
Dim pa As Integer ‘数组a的下标
Dim pb As Integer ‘数组b的下标
‘读取n个转换前的数据,依次存储到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 = 1 To m * m
b(pb) = a(pa)
pb = pb + 1
If i Mod m = 0 Then
②
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
‘依次输出转换后数据b(1)、b(2)、……b(n)中,代码略
End Sub
参考答案:
(1)4
(2) ①m=m-1或 m=int(sqr(left)) ②pa=start+im 或pa=start+i/m 或pa=pa-(m-1)m+1 或 pa=start+(pa-start+1) mod m ③left=left-m*m
Python代码:
a=[1756,1754,1875,962,1690,1897,1789,1768,1478,1945, 1364,1234,1256,1456,1423,1756,1878,1456,1878,1787, 1987,1654,1635,1536,1765,1980,1850,1765,1720,1743, 1756,1746,1748,1789,1788,1488,1758,1756,1479,1423, 1523,1543,1546,1523,1258,1359,1357,1356,1456,1459, 1457,1458,1578,1579,1574,1576,1546,1548,1574,1678, 1687,1698,1655,1623,1624,1654,1652,1678,1657,1644, 1899,1399,1389,1356,1359,1357,1375,1367,1364,1988, 1855,1457,1689,1788,1356,1235,1987,1568,1699,1654, 1235,1238,1247,1599,1245,1356,1258,1345,1322,1222, 1234,1345,1346,1432,1567,1981,1786,1674,1799,1342, 1541,1453,1675,1654,1567,1543,1438,1324,1543,1324]
n=len(a)
b=a[:]
m = 8
start = 0
left = n
while left>3:
if left<m*m-1:
m=m-11
else:
pa=start
pb=start
for i in range(mm-1):
b[pb]=a[pa]
pb=pb+1 <
if (i+1)%m==0:
pa=start+(i+1)//m
else:
pa=pa+m
left=left-m*m
start=start+m*m
for i in range(start,n):
b[i]=a[i]
print(‘数组b:’,b)
Python代码运行结果: