• 【转】常用算法总结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

  • 相关阅读:
    day50 初识JavaScript
    在C#中对Datatable排序【DefaultView的Sort方法】
    Windows Phone 中查找可视化树中的某个类型的元素
    抽象类(abstract)是否可以继承自实体类 ?
    C#遍历指定目录下的所有文件及文件夹
    Log4Net总结
    Firefox 与 IE 对Javascript和CSS的区别
    RSS 订阅
    Win8 URI 方案 ms-appX 用法大全
    ProgressIndicator显示进度条以及一些文字信息
  • 原文地址:https://www.cnblogs.com/gates/p/3549072.html
Copyright © 2020-2023  润新知