友情提示:380元/半年,儿童学编程,就上码丁实验室。
VB代码:(2018年8月金丽衢12校)17.【加试题】数组a()中相邻两个数据无重复,现要查找连续最大步长的升序段。具体描述如下:
(1)步长指的是升序段中最后元素和最初元素的差值;
(2)有相同步长的升序段则输出最先找到的升序段。
程序界面如第17题图所示。
实现上述功能的 VB 代码如下:
Dim a(100) As Integer ‘用来存放数据
Dim k As Integer ‘用来存放数据的数组元素的个数
Private Sub FormLoad()
‘从数据库中读取数据并存储在相关数组变量中。并将数据输出在文本框中。
Text1.Text = s
End Sub
Private Sub Command1_Click()
Dim flag As Boolean, pmax As Integer, mstep As Integer, steps As Integer, max As Integer, st As String , tmax As Integer
st = “” : pmax = 1 : mstep = 0 : max = 0 : t = 0 : tmax = 0
If a(2) > a(1) Then flag = True Else flag = False
For i = 1 To k – 1
If a(i + 1) > a(i) Then
If flag = True Then
①
t = t + 1
If mstep > max Then
max = mstep
pmax = i + 1
②
End If
Else
mstep = a(i + 1) – a(i)
t = 1
If mstep > max Then
max = mstep
pmax = i + 1
tmax = 1
End If
flag = True
End If
Else
③
End If
Next i
For i = pmax – tmax To pmax
st = st + Str(a(i))
Next i
List1.AddItem st
End Sub
(1)若数据为“24 7 2 16 25 68 45 32 2 23 46 67 26 ” 则最大步长的升序段为 。(1分)
(2)实现上述功能,请在划线处填入适当的代码:
程序中①处填入的是 。(2分)
程序中②处填入的是 。(2分)
程序中③处填入的是 。(1分)
参考答案:
(1)2 16 25 68(1分)
(2)程序中①处填入的是 mstep = mstep + a(i + 1) – a(i) (2分)
程序中②处填入的是 tmax = t (2分)
程序中③处填入的是 flag = False (1分)
Python代码如下:
a=[25,13,9,14,28,34,39,58,90,66,55,9,68,73,85,65]
st = “”
pmx = 1
mstep = 0
mx = 0
t = 0
tmx = 0
k=len(a)
if a[1]>a[0]:
flag=True
else:
flag=False
for i in range(k-1):
if a[i+1]>a[i]:
if flag==True:
mstep=mstep+a[i+1]-a[i]
t=t+1
if mstep>mx:
mx=mstep
pmx=i+1
tmx=t
else:
mstep=a[i+1]-a[i]
t=1
if mstep>mx:
mx=mstep
pmx=i+1
tmx = 1
flag = True
else:
flag=False
for i in range(pmx – tmx,pmx+1):
st = st + str(a[i])+’ ‘
print(‘最长步长升序段:’+st)
Python代码运行结果如下: