计算机等级考试二级VB常用算法Word文件下载.docx
《计算机等级考试二级VB常用算法Word文件下载.docx》由会员分享,可在线阅读,更多相关《计算机等级考试二级VB常用算法Word文件下载.docx(21页珍藏版)》请在冰豆网上搜索。
Asc(c)
+
5
If
iAsc
>
Asc("
)
Then
-
26
Code
&
Chr(iAsc)
a"
z"
Else
End
Select
Next
i
Text2.Text
Code
Sub
Command3_Click()
Text1.Text
Text3.Text
Text1.SetFocus
Sub
2)统计
问题提出
统计字符或者数字出现的次数。
算法说明
以字符统计为例,设基本问题如下:
请统计一段文本中英文字母在文本中出现的次数。
(不区分大小写)
如:
Iamastudent.
得到:
A:
2d:
1e:
1I:
1m:
1n:
1s:
1t:
2u:
1
分析:
由于不区分大小写,因此可定义一个大小为26(下标:
0-25)的数组,每个元素依次记录A、B、C…Z字母出现的次数。
A(0)存放字母a出现的次数
A
(1)存放字母b出现的次数
A
(2)存放字母c出现的次数
A(3)存放字母d出现的次数
…
譬如:
aabdc
Integer,
j
Integer
zimu(25)
allStr
String
aStr
allStr
UCase(Text1.Text)
Len(Text1.Text)
aStr
Mid(allStr,
And
<
Then
zimu(Asc(aStr)
))
zimu(Asc(aStr)
If
0
25
zimu(i)
j
Text2.Text
Chr(i
:
str(zimu(i))
Mod
5
Chr(13)
Chr(10)
解题技巧
熟练运用字符处理函数,对于一些数论题,譬如逆序数等也可将数字通过CStr函数转换为字符后,利用字符处理函数来解题。
2、实战练习
1)补充代码(2003秋二(8))
下面程序的功能是统计文件中英文字母(不区分大小写)出现的个数。
Base
alpha(26)
Integer,n
Integer,s
Open
c:
\kav2003\readme.txt"
For
Input
#11
Do
While
Not
EOF(11)
s=
(1)
s=UCase(s)
s>
="
s<
n=
(2)
alpha(n)=alpha(n)+1
Loop
i=1
alpha(i)<
List1.AddItem
Chr(i+64)&
CStr(alpha(i))
Close
2)补充代码(2000秋二(6))
下面程序的功能是:
统计当前盘当前文件夹中的顺序文件data.txt中共有多少个单词,约定连续出现的字母定义为一个单词。
Form_Click()
Char()
String,
St
Tem
Idx
Js
Long,
Flen
Long
F
Boolean,
W
(1)
Flen
LOF(10)
St
Input(Flen,
#10)
Js
Flen+1
W
Mid(St,
Js,
(2)
Tem
W
F
True
ElseIf
True
Idx
ReDim
Preserve
Char(Idx)
Char(Idx)
Tem
(3)
False
(4)
Print
共有"
;
Idx;
个单词"
Idx
Char(Js)
Js
排序1
1)初等数学
递推法
又称为“迭代法”,其基本思想是把一个复杂的计算过程转化为简单过程的多次重复。
每次重复都在旧值的基础上递推出新值,并由新值代替旧值。
问题:
猴子吃桃子
小猴子有若干桃子,第一天吃掉一半多一个;
第二天吃掉剩下的一半多一个…..;
如此,到第七天早上要吃时,只剩下一个桃子。
问小猴子一开始共有多少桃子?
可以最后一天桃子数推出倒数第二天的桃子数;
再从倒数第二天推出倒数第三天桃子数………..
设第n天桃子数为xn,前一天桃子数是:
xn-1,则有关系:
xn=xn-1/2-1
程序如下:
n%,
i%
x
'
第七天桃子数
第七天桃子数:
1只"
6
Step
-1
(x
1)
2
第"
天桃子数:
x
只"
穷举法
又称枚举法,即将所有可能情况一一测试,判断是否满足条件,一般用循环实现。
百元买鸡问题。
假定小鸡每只5角;
公鸡每只2元;
母鸡每只3元。
现在有100元,要求买100只鸡,编程列出所有可能的购鸡方案。
设母鸡、公鸡、小鸡分别x、y、z只,则有:
x+y+z=100
3x+2y+0.5z=100
程序一:
x%,
y%,
z%
100
y
z
100
3
2
0.5
x,
y,
z
y
x
程序二(优化)
y%
33
50
(100
y)
2)高等数学
求积分
近似计算积分:
s=∫13(x3+2x+5)dx
Public
Function
f(ByVal
x!
被积函数
f
2)
Function
trapez(ByVal
a!
ByVal
b!
n%)
Single
'
b、a分别为积分上下限,n为等分数
sum!
h!
h
(b
a)
/
n
sum
(f(a)
f(b))
n
a
h
sum
f(x)
trapez
Function
调用:
trapez(1,
3,
30)
数论综合题
此类题目比较广泛,必须给以足够重视。
历年题目有:
平方数、零巧数、拟互满数、回文数、酉完数、完数、幸运数、逆序数以及无暇素数、超级素数、因子和等。
排序2
1)补充代码(2002秋二(10))
找出由两个不同数字组成的平方数,并将结果按图中的格式显示在列表框List1中。
I
N
11
300
Verify(N)
(2)
I
Verify(
(3)
Boolean
A(0
9)
0
N
\
10
9
A(I)
(5)
1)编程题(2004秋上机试卷08)
一个正整数被称为奇妙平方数,如果此数的平方与它的逆序数的平方互为逆序数。
例如,
12^2=144,21^2=441,12与21互逆,144与441互逆,12就是奇妙平方数。
找出1-300以内所有的奇妙平方数。
1)顺序查找
逐个元素找,如果有,则记录位置,然后跳出循环;
否则,查找失败。
Search(a(),
Key,
Index
Integer)
LBound(a)
UBound(a)
a(i)
Key
找到,将元素下标保存在index中并结束查找
Index
Exit
-1
若没找到,则index值为-1
2)二分法查找
顺序查找效率低下,当数组有序排列时,可以使用二分法查找提高效率。
算法思想:
birSearch(a(),
low%,
high%,
index%)
mid
low
high
没有查找到
index
mid
(low
high)
取查找区间的中点
a(mid)
查找到,返回下标
mid
查找区间在上半部分
high
Else
low
查找区间在下半部分
Call
birSearch(a,
low,
high,
index)
递归调用查找函数
调用方法:
a(11)
a
(1)
5:
a
(2)
13:
a(3)
19:
a(4)
21:
a(5)
37
a(6)
56:
a(7)
64:
a(8)
75:
a(9)
80:
a(10)
88:
a(11)
92
ind
LBound(a),
UBound(a),
21,
ind)
ind
2、实战练习补充代码(2002春二(9))
C盘根目录下stu.txt文件中以下的格式保存着学生姓名及班号信息。
本程序的功能是:
读取该文件中的数据,再利用InputvBox输入要查找的学生姓名,通过顺序查找,给出找到或找不到的信息。
附图是某同学被找到时显示的信息窗口。
张文,机械01
李明,机械01
王文卉,机械01
何宇宙,电子02
Form_click()
stu()
glass()
name
k
\stu\stu.txt"
stu(n),
glass(n)
Input
#11,
name
InputBox("
输入欲查找的学生姓名:
)
search(name,
stu,
k)
MsgBox
无此人。
Close
search(name
UBound(stu)
stu(i)
1、算法说明数组中元素的插入和删除一般是在已固定序列的数组中插入或删除一个元素,使得插入或删除操作后的数组还是有序的。
基本思路:
首先要找到插入位置或要删除的元素。
1)插入
9
生成数组
a(i)
a(i);
Print
插入14"
查找插入14在数组中的位置
14
a(k)
Exit
For
k
从最后元素开始逐个后移,腾出位置
a(i
a(i)
a(k)
插入数14
2)14710131619222528
K
删除代码如下:
a()
as
integer
….
a(1
to
n)
…
i=k+1
a(i-1)=a(i)
Redim
preserve
n-1)
C盘根目录下文件Data4.txt的内容是:
2,4,6,8,10,1,3,5,7,9。
下面程序的功能是将文件后半部分的奇数分别按序插入到前半部分的适当位置,得到的新数列是:
12345678910。
(实现方法:
第一次调整后的数列是:
12468103579第二次调整后的数列是:
12346810579)。
Explict
A(10)
Integer,i
Integer,J
\Data4.txt"
#12
J=J+1
#12,A(J)
Insert(A)
A(i);
Insert(A()
Integer,Putp
Getp
Integer,N
Integer,Tem
N=UBound(A)/2
Putp=1
Getp=N+1
N
Tem=A(Getp)
J=Getp
Putp
+1
J
A(Putp)=Tem
Getp=Getp+1
Putp=
补充代码
下面程序得功能是将无序数组中相同得数只保留一个,其余得删除,并输出经过删除后的数组元素,删除相同数是通过将该数组元素后面的元素在数组内依次前移替换前一个元素的值实现的。
数组各元素的值从文件data.txt中读取。
Option
Integer,K
A()As
Integer,T
Integer,M
\my
documents\2000test\data.txt"
#1
I=I+1
#1,A(I)
M=1:
T=
M
I=M+1
I<