【转】常用算法总结1

一、变量值的交换
算法思想:若交换两个变量的值,必须引入第三个新的变量进行传递。
以下代码是错误的:
X=12 :Y=34 :X=Y :Y=X
正确的代码是:
X=12 :Y=23 :T=X :X=Y :Y=T
二、判断一个数是否能被另一个数整除
算法思想:可以用整除的定义(余数为0)或X除以Y等于X整除Y等表达式进行判断。
条件表达式可以为:X mod Y=0   或     X\ Y=X/Y   或      Int(X/Y)=X/Y
如果以上条件表达式为True,则表示X能被Y整除。
三、累加、阶乘、计数和求平均值
算法思想:使用循环语句,并用一个变量存放累加的中间及最终结果。
注:
累加求和时变量初值为0,计算阶乘时变量初值为1。
统计计个数(计数)时可用一个变量作为统计个数的累加变量,每次加1即可。
求平均值算法思想是先求和,再除以个数。
条件求和(或计数):在循环语句中加入If-End If判断语句。

例题:计算1到10之间所有整数的累加和以及10!。
n=10
sum=0                         ‘累加求和时,变量的初值一定为0
prod=1                         ‘累乘(连乘)时,变量的初值一定为1
For i=1 To n
sum=sum+i
prod=prod*i
Next i
Print sum,prod

例题:统计0—100之间能被3整除的数的个数、累加和及其平均值。
s=0
n=0
For i=0 To 100
If i mod 3 =0 Then
s=s+i
n=n+1
End If
Next i
Print n,s,s/n
四、对数组中的元素逐一进行操作
算法思想:在VB中,对于数组中元素的操作,往往使用到For循环。通用代码为:
Dim 数组名([下标下界] To 下标上界)
……
For i=LBound(数组名) To UBound(数组名)
……
数组名 ( i ) ……
……
Next i
通过以上循环,可以对数组中所有元素逐一操作。
注:
1) LBound函数:返回数组的下界
UBound函数:返回数组的上界
2)如果数组上界和下界已经确定,可以不使用函数,直接指明即可。例如
Option Base 1

Dim a(100) As Integer
For i=1 To 100
……
a ( i ) ……
……
Next i
3)对于二维数组,要使用For循环的嵌套实现对数组中元素的操作,其中外层循环变量控制第一维下标的变化,内层循环变量控制第二维下标的变化,例如:
Option Base 1

Dim a(2,3) As Integer
For i=1 to 2
For j=1 to 3
……
a (i,j) ……
……
Next j
Next i
例题:
1.对下标为偶数的元素进行处理的程序代码
Option Base 1
……
For i=1 to UBound(a)                   ‘循环变量i可代表数组元素的下标
If i mod 2 =0 Then
a (i) ……
End If
Next i
2.对数组元素中数据为偶数的元素进行处理
Option Base 1
……
For i=1 to UBound(a)                   ‘循环变量i代表数组元素的下标
If a(i) mod 2 =0 Then
a (i) ……
End If
Next i
五、交换数组元素
算法思想:若某一维数组有n个元素,将第1个元素和第n个元素交换,将第2个元素和第n-1个元素交换……,需要交换n\ 2次(如果交换n次,则回到初始状态);对于二维数组,若进行行交换或列交换,需要使用循环语句,每次循环需要使用变量值交换算法。
例题:交换一维数组(5个元素)的元素值
b = Array(1, 3, 5, 7, 9)
For i = 0 To 5\ 2
tmp = b(i)
b(i) = b(5 - i - 1)
b(5 - i - 1) = tmp
Next i
End Sub
例题:一维数组元素交换的通用代码:
n = UBound(数组名)
For i = LBound(数组名) To n \ 2
t = b(i)
b(i) = b(n)
b(n) = t
n = n - 1
Next i
例题:交换二维数组Mat第二列和第四列的数据
For i=LBound(Mat,1) To UBound(Mat,1)
t = Mat(i, 2)
Mat(i, 2) = Mat(i, 4)
Mat(i, 4) = t
Next i
例题:交换二维数组Mat第一行和第三行的数据
For j=LBound(Mat,2) To UBound(Mat,2)
t = Mat(1, j)
Mat(1,j) = Mat(3,j)
Mat(3,j) = t
Next i
六、求数组元素中的最大值、最小值
算法思想:假设数组中第一个元素为最大值,并赋给变量Max,然后使用循环结构依次与第2个数组元素至最后一个元素进行比较,如果某数组元素的值大于Max,则将该元素的值赋给Max(同时可记录下该数组元素在数组中的位置)。
例题:显示数组a中的最大值及其下标。
Option Base 1

Dim Max As Integer, Index As Integer
Max=a(1)
aIndex=1
For i=2 to UBound(a)
If a(i)>Max Then
Max=a(i)
aIndex=i
End If
Next i
Print Max , i
求最小值的方法与此类似,差别在于取第一个元素为最小值Min,与2个数组元素至最后一个元素进行比较时判断关系有所调整,即
Min=a(1)
If a(i)<Min Then
Min=a(i)
End If

文章引用自:http://blog.tom.com/blog/read.php?bloggerid=785723&blogid=45941

原文地址:https://www.cnblogs.com/gates/p/3549072.html