VB常用算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VB常用算法(二)最值问题- -

1、算法说明

在若干数中求最大值,一般先取第一个数为最大值的初值(即假设第一个数为最大值),然后,在循环体内将每一个数与最大值比较,若该数大于最大值,将该数替换为最大值,直到循环结束。

求最小值的方法类同。

求若干数平均值,实质上就是先求和,再除以这些数的个数。

应用举例

随机产生n个1-100(包括1和100)的数,求它们的最大值、最小值和平均值。

Private Sub Command1_Click()

Dim n As Integer, i As Integer, min As Integer, max As Integer, aver As Single, s As Integer

n = Val(InputBox("输入个数:"))

s = Int(Rnd * 100) + 1

max = s

min = s

aver = s

Print "第1个数是:" & s

For i = 2 To n

s = Int(Rnd * 100) + 1

Print "第" & i & "个数是:" & s

If s > max Then max = s

If s < min Then min = s

aver = aver + s

Next i

aver = aver / n

Print "max="; max; "min="; min; "aver="; aver

End Sub 解题技巧

最大值、最小值、平均值类型题目往往和数组放在一起考!有的不仅求这些值,还要对具有最大值或者最小值的行或列或者某个元素进行处理,这时就要在记录最大、最小值时,同时记录该值所在的行号和列号。

2、实战练习

1)补充代码(2000春二(9))

本程序的功能是在二维数组中查找鞍点元素,即该元素在所在行中为最大,且在所在列中为最小。在一个数组中可能存在,也可能不存在这样的元素。数组各元素的值从文件data.txt中读取。

Private Sub Form_Click()

Dim a(3,3) As Integer,i As Integer,j As Integer

Dim maxvr As Integer,col As Integer, As Integer

Open data.txt For Input As #1

For i=1 To 3

For j=1 To 3

Input #1,a(i,j)

Print a(i,j);

Next j

Print

Next i

For i=1 To 3

maxvr= (1)

col=1

For j=2 To 3

If maxvr

maxvr= (2)

col=j

End If

Next j

For j=1 To 3

If maxvr>a(j,col) Then (3)

Next j

If j>3 Then

Print a(;i;,;col;)=;a(i,col)

=1

End If

If (4)Then Print 鞍点元素不存在

Next i

End Sub

2)编程题(2002秋上机试卷05)

随机生成所有数组元素都是两位数的3×3的二维数组,找出其中不同行、不同列的三个数组元素的乘积最大的一组,并将这三个元素显示在图片框中。

VB常用算法(三)素数

1、算法说明

素数(质数):就是一个大于等于2的整数,并且只能被1和本身整除,而不能被其他整数整除的数。

判别某数m是否是素数的经典算法是:

对于m,从I=2,3,4,……,m-1依次判别能否被I整除,只要有一个能整除,m就不是素数,否则m是素数。

Private Function sushu(ByVal n As Long) As Boolean

Dim i As Long

For i = 2 To n - 1

If (n Mod i) = 0 Then Exit For

Next I

If I=n then sushu=True

End Function

很显然,实际上,我们可以改进上面

For i = 2 To n – 1

为:

For i = 2 To int(sqr(m))

这样可以很好的提高效率。

以上判断是否为素数的代码务必识记!

应用举例

求100-200之内素数。

Private Sub Command1_Click()

Dim j As Integer

For j = 100 To 200

If sushu(j) = True Then

Print j

End If

Next j

End Sub

解题技巧

识记判断素数的算法过程,根据题意,灵活调用!

实例说明

编程题(2002年春上机试卷04)

找出10000以内所有可以表示为两个平方数和的素数。

思路:

首先找10000以内的所有素数,对于每个素数判断其是否可以表示为两个平方数之和(即对于任意小于该素数shu的数I,如果I和shu -I均为平方数,则说明其可以表示为两个平方数之和。)

判断数I是否为平方数的方法:sqr(i)=int(sqr(i))

Private Sub Command1_Click()

Dim j As Integer

Dim m As Long, n As Long

For j = 2 To 10000

If sushu(j) = True Then

If pf(j, m, n) = True Then

List1.AddItem j & "=" & m & "+" & n

End If

End If

Next j

End Sub

Private Function pf(ByVal shu As Long, m As Long, n As Long) As

Boolean

Dim i As Long

For i = 1 To shu - 1

If (Sqr(i) = Int(Sqr(i))) And (Sqr(shu - i) = Int(Sqr(shu - i))) Then

pf = True

m = i

n = shu - i

Exit Function

End If

Next

End Function

2、实战练习

1) 补充代码(2002春二(7))

下列程序的功能是:查找四位正整数中的超级素数。超级素数的定义为:当一个素数从低位到高位依次去掉一位数后剩下的数仍然是素数,则此数为超级素数。如数2333、233、23、2均为素数,所以2333为超级素数。

Option Explicit

Private Sub Command1_Click()

Dim I As Integer, flg As Boolean

For I = 1001 To 9999 Step 2

Call sup_prime(I, flg)

If flg Then

Debug.Print I

End If

Next I

End Sub

Private Sub sup_prime( (1), F As Boolean)

Dim p As Integer

F = True

Do While N > 0

If prime(N) Then

(2)

Else

(3)

Exit Sub

相关文档
最新文档