最新消息:

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

Python 少儿编程 1607浏览 0评论

VB代码:(2018年9月金华十校)16.【加试题】查找峰值问题:随机生成 n 个正整数(假设 n=20 ,取值范围为 0~100),存储于数组a()中,将这些数按顺序映射在坐标轴上,相邻的数用直线相连,构建了类似于“心电图”的折线:

VB_Python代码对照算法百题(021)编写 VB 程序统计所有的峰值(peak)、峰值数量(count)和最高点(high)。实现上述功能的 VB 程序如下,加框处的代码有错误,请改正。
Const n = 20
Dim a(1 To n) As Integer
Private Sub Form
Load()
‘随机生成 n 个数,存储于数组 a 中,并输出在 List1 中。
‘代码略。

End Sub
Private Sub Command1_Click()

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

Dim count As Integer 

Dim high As Integer 

Dim peak As Integer
Dim i As Integer,j As Integer 

count=0
if a(1)>a(2) then count = 1
high = -1
i = 1
Do While i < n – 1   

    j = i + 1  

    If a(j) > a(j – 1) Then   

        Do While a(j) > a(j – 1)  

            j = j + 1  

        Loop   

        count = count + 1  

        peak = a(j) ‘①  

        List2.AddItem “第” + Str(count) + “个峰值: ” + Str(peak)  

        If peak > high Then high = peak   

        i = i + 1 ‘②  

    Else  

        i = i + 1   

    End If
Loop
List2.AddItem “共有:” + Str(count) + ” 个峰值”
List2.AddItem “最高点是:” + Str(high)
End Sub

参考答案:

①peak=a(j-1)
②i=j

解析:

①Do while a(j)>=a(j-1)
J=j+1
Loop
通过上述循环,找到当前波段第一个不符合a(j)>=a(j-1)的点,此时J标注的是峰值过后的点,峰值点应该在J-1。
②完成上述循环后,J-1之前的点均已比较过,下一轮从J开始比较即可。

Python代码如下:

a=[80,82,91,63,26,2,1,62,70,64,

47,48,65,53,88,28,39,10,7,37]
n=len(a)
peak=0
count=0
if a[0]>a[1]:  

   count=1
high=-1
i=0
while i<n-2:

    j=i+1

if a[j]>a[j-1]:

while a[j]>a[j-1]:

j=j+1

count=count+1

peak=a[j-1]

print(‘第’+str(count)+’个峰值’+str(peak))

if peak>high:

high=peak

i=j

else:

i=i+1
print(‘共有’+str(count)+’个峰值’)
print(‘最高点是:’+str(high))

VB_Python代码对照算法百题(021)Python代码运行结果如下:

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

 

您必须 登录 才能发表评论!