经典算法程序实现15(常见算法)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
经典算法程序实现2018
(综合练习)
班级:__________姓名:__________
1.用随机函数产生100个[0,99]范围内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数并打印出来。
Public Sub GetTJput()
Dim a(1 To 100) As Integer
Dim x(1 To 10) As Integer
Dim i As Integer, p As Integer
'产生100个[0,99]范围内的随机整数
For i = 1 To 100
a(i) = Int(Rnd * 100)
If a(i) < 10 Then
Lab1.Caption= Lab1.Caption & " " & Str(a(i)) Else
Lab1.Caption= Lab1.Caption & Str(a(i)) End If
'每行10个在标签Lab1显示出来
If ______________ Then
' 字符串常量VbCrLf的作用:换行
Lab1.Caption= Lab1.Caption & VbCrLf
End If
Next i
'统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0
'的数的个数,并将统计结果保存在数组x(1),x(2),...,x(10) '中,将统计结果在标签Lab2显示出来
For i = 1 To 100
p =______________ '求个位上的数字
If p = 0 Then p = 10
x(p) =______________
Next i
Lab2.Caption="统计结果"
For i = 1 To 10
p = i
If i = 10 Then _____________
Lab2.Caption= Lab2.Caption & "个位数为"+ _
Str(p) + "共" + Str(x(i)) + "个"
Next i
End Sub
2. 哥德巴赫猜想:任意一个大于等于6的偶数都可以分解为两个素数之和。
基本思想:n为大于等于6的任一偶数,可分解为n1和n2两个数,分别检查n1和n2是否为素数,如都是,则为一组解。如n1不是素数,就不必再检查n2是否素数。先从n1=3开始,检验n1和n2(n2=N-n1)是否素数。然后使n1+2 再检验n1、n2是否素数,…直到n1=n/2为止。
’ Prime函数功能:若为素数返回True,不是则返回False Function Prime( m as Integer) As _____________ Dim i As Integer
_____________
For i=2 To int(sqr(m))
If m Mod i = 0 Then Prime=False: Exit For
Next i
End Function
’利用上面的Prime函数,验证哥德巴赫猜想
Dim n As Integer,n1 As Integer,n2 As Integer
n=Val(InputBox("输入大于6的正整数"))
For n1=3 to n\2 step 2
n2=n-n1
If prime(n1) Then
If _____________ then
Print n & "=" & n1 & "+" & n2
Exit For '结束循环
End if
End if
Next n1
3.合并法排序(将两个有序数组A、B合并成另一个有序的数组C,升序)
基本思想:
1)先在A、B数组中各取第一个元素进行比较,将小的元素放入C数组;
2)取小的元素所在数组的下一个元素与另一数组中上次比较后较大的元素比较,重复上述比较过程,直到某个数组被先排完;3)将另一个数组剩余元素抄入C数组,合并排序完成。
程序段如下:
'当A和B数组均未比较完
Private Sub Cmd_Click()
Dim A(1 To 200) As Integer
Dim B(1 To 200) As Integer
Dim ia As Integer,ib As Integer
Dim na As Integer,nb As Integer
'A、B数组数据从外部文件读入,分别存储在A(1)、B(1)开始的元素中,数据个数存储在na、nb中
ia=1: ib=1: ic=_______
Do While _______________________
If A(ia) < B(ib) Then
C(ic) = A(ia): ia = ia + 1
Else
C(ic) = B(ib): ib = ib + 1
End If
_____________
Loop
'A数组中的剩余元素抄入C数组
Do While ia <= na
C(ic) = A(ia)
ia = ia + 1: ic = ic + 1
Loop
'B数组中的剩余元素抄入C数组
Do While ib <= nb
C(ic) = B(ib)
__________: ic = ic + 1
Loop
End Sub
4.顺序查找法(在一列数中查找某数key)
Private Command1_Click()
Dim a(1 To 100) As Integer
Dim n As Integer,p As Integer,i As Integer
Dom key As Integer
key =Val(Text1.Text)
For i=1 To 100
A(i)=Int(Rnd()*100)+1
Next i
p = 1
Do While __________________________
p = p + 1
Loop
If p>100 then
Text1.Text= "找不到:" & Str(Key)
Else
Text1.Text= "找到:" & Str(Key) & "位置:" Str(p)
End Sub
5.把一个数插到有序数列中,插入后数列仍然有序
基本思想:n个有序数(从小到大)存放在数组a(1)—a(n)中,要插入的数x。首先确定x插在数组中的位置p;(可由以下语句实现)
p=1
Do While _____________ and p<=n
p=p+1
Loop
’a(p)—a(n)元素向后顺移一个位置以空出a(p)元素放入x,可由以下语句实现:
For i=n To p Step -1
__________________________
Next i
a(p)=x
6.简单加密和解密
加密的思想是:
将每个字母C加(或减)一序数K,即用它后的第K个字母代替,变换式公式: c=chr(Asc(c)+k)
例如序数k为5,这时 "A"→ "F", "a"→?"f","B"→?"G"…当加序数后的字母超过"Z"或"z"则 c=Chr(Asc(c)+k -26) 例如:You are good→ Dtz fwj ltti
解密为加密的逆过程
将每个字母C减(或加)一序数K,即 c=chr(Asc(c)-k),
例如序数k为5,这时 "Z"→"U", "z"→"u","Y"→"T"…
当加序数后的字母小于"A"或"a"则 c=Chr(Asc(c)-k +26)
下段程序是加密处理:
i = 1: strp = ""
nL = Len(strI)
Do While (i <= nL)
strT = _____________ '取第i个字符
If (strT >= "A" And strT <= "Z") Then
iA = Asc(strT) + 5
If iA > Asc("Z") Then iA = iA - 26
strp = strp + Chr(iA)
ElseIf (strT >= "a" And strT <= "z") Then
iA = Asc(strT) + 5
If _____________ Then iA = iA - 26
strp = strp + Chr(iA)
Else
strp = strp + strT
End If
i = i + 1
Loop
Print strp
7.统计文本单词的个数
(1)从文本(字符串)的左边开始,取出一个字符;设逻辑量WT表示所取字符是否是单词内的字符,初值设为False;
(2)若所取字符不是“空格”,“逗号”,“分号”或“感叹号”等单词的分隔符,再判断WT是否为True,若WT不为True则表是新单词的开始,让单词数Nw=Nw+1,让WT=True;
(3)若所取字符是“空格”,“逗号”,“分号”或“感叹号”等单词的分隔符,则表示字符不是单词内字符,让WT=False; (4)再依次取下一个字符,重得(2)(3)直到文本结束。
下面程序段是字符串strI中包含的单词数
Nw = 0: Wt = _____________
nL = Len(strI)
For i = 1 To nL
strT = Mid(strI, i, 1) '取第i个字符
If strT=" " Or strT="," Or strT=";" Or strT="!" Then Wt = False
Else
If Not Wt Then
Nw = Nw + 1
_____________
End If
End If
Next i
Print "单词数为:", Nw