Dim chicken As Integer Dim foot As Integer

  • Slides: 16
Download presentation

Dim chicken As Integer Dim foot As Integer For chicken = 1 To 78

Dim chicken As Integer Dim foot As Integer For chicken = 1 To 78 foot = chicken * 2 + (79 - chicken) * 4 If foot = 200 Then Exit For End If Next chicken 问题:如果找不到答案,如 何输出“err”的提示? If chicken = 79 Then s = "err" Else s = "鸡: " & chicken & "; 兔子:" & 79 - chicken End If

另一种方案 Dim chicken As Integer Dim foot As Integer Dim find As Boolean find

另一种方案 Dim chicken As Integer Dim foot As Integer Dim find As Boolean find = False For chicken = 1 To 78 foot = chicken * 2 + (79 - chicken) * 4 If foot = 200 Then find = True Exit For End If Next chicken 下面表达式,哪些可以使用? 1)find = True 2)find = False 3)Not find 4)find If ________ Then s = "err" Else s = "鸡: " & chicken & "; 兔子:" & 79 - chicken End If

00 01 99 03 02 01 98 00 02 03 …… 98 99 J

00 01 99 03 02 01 98 00 02 03 …… 98 99 J 让变量J依次取 0到 99这 100个不同的值, 同时对于 J的每个确定的值乘以 10加上25006这样就能形成 一个可能解. J 0 1 2 …… 乘以 10 00 10 20 加上25006 25016 25026 98 980 25986 99 990 25996 验证条件: N MOD 37=0 OR N MOD 67=0

Do循环与for循环互换 • j = 0 • Do While j<=99 • n = 25006 +j*10

Do循环与for循环互换 • j = 0 • Do While j<=99 • n = 25006 +j*10 For j=0 to 99 • If n Mod 37 = 0 Or n Mod 67 = 0 Then • List 1. Add. Item Str(n) • c = c + 1 • End If • j =j+1 • Loop Next j

多种方案 For i = 0 To 9 For n = 0 To 9 x

多种方案 For i = 0 To 9 For n = 0 To 9 x = 25006 + i * 100 + n * 10 If x Mod 37 = 0 Or x Mod 67 = 0 Then List 1. Add. Item x c=c+1 End If Next n Next i For i = 0 To 9 For n = 0 To 9 x = Val("25" & i & n & "6") If x Mod 37 = 0 Or x Mod 67 = 0 Then List 1. Add. Item x c=c+1 End If Next n Next i

例2:辗转相除法求最大公约数 Dim a As Integer, b As Integer a = 6 b = 9

例2:辗转相除法求最大公约数 Dim a As Integer, b As Integer a = 6 b = 9 If a < b Then t = a: a = b: b = t A=9 B=6 R=3 ------A=6 B=3 R=0 ‘交换a,b End If r = a Mod b Do While r <> 0 a = b b = r r = a Mod b Loop Label 1. Caption = "最大公约数:" + Str(b) 迭代法

例3:找出 2到 1000的所有素数。 Dim n As Integer, i As Integer, j As Integer Dim

例3:找出 2到 1000的所有素数。 Dim n As Integer, i As Integer, j As Integer Dim flag As Boolean For j = 2 To 1000 n = j flag = True i = 2 Do While i <= Int(Sqr(n)) And flag If j Mod i = 0 Then flag = False Else i = i + 1 End If Loop If flag = True Then List 1. Add. Item Str(j) + "是素数!" End If Next j 关键: 1. 枚举要优化算法,减 少无用的循环。 2. Flag的作用很大。

Dim result As String, s As String, c As String Dim n As Integer,

Dim result As String, s As String, c As String Dim n As Integer, i As Integer, j As Integer s = Text 1. Text 2. Text = " " For i = 1 To Len(s) n = Asc(Mid(s, i, 1)) If n >= 65 And n <= 90 Or n >= 97 And n <= 122 Then result = result + Mid(s, i, 1) Text 2. Text = result End If Next i 为什么j要从2开始? j = 2 c = Mid(result, 1, 1) j = 2 Do While j <= Len(result) If Mid(result, j, 1) > c Then c = Mid(reuslt, j, 1) jj == jj ++ 11 Loopj = j + 1 Text 3. Text = c 问:

Dim s 1 As String, s 2 As String, st As String Dim len

Dim s 1 As String, s 2 As String, st As String Dim len 1 As Integer, len 2 As Integer, i As Integer, m As Integer s 1 = Text 1. Text: s 2 = Text 2. Text len 1 = Len(s 1): len 2 = Len(s 2) i = 1: m = 0 i <= len 1 Do While i <= i, len 1 Mid(s 1, len 2) = s 2 If Mid(s 1, i, len 2) = s 2 Then i = i + len 2 关键:如果找到相同的单词, i = i + len 2 就要跳过这个位置。 m = m + 1 Elsest = st + Mid(s 1, i, 1) i = i + 1 End If Loop Text 3. Text = st m是删除的单词数量 Label 1. Caption = Str(m)