内容正文:
算法初步
三、算法在解决问题中的地位和作用
三、算法在解决问题中的地位和作用
问题探究:韩信点兵
相传汉高祖刘邦问大将军韩信统御兵士多少,韩信答说,每3人一列余2人、5人一列余3人、7人一列余2人……。刘邦茫然而不知其数。请你自己算一下,韩信有多少士兵?”(满足条件的最小数)
求整除3余2、整除5余3、整除7余2的最小自然数。
问题探究:韩信点兵
Private Sub Command1_Click()
Dim X As Integer, Y As Integer
X = 1: Y = 0
Do
If X Mod 3 = 2 Then
If X Mod 5 = 3 Then
If X Mod 7 = 2 Then
Y = X
End If
End If
End If
X = X + 1
Loop Until Y > 0
Print "韩信统御士兵数:"; Y
End Sub
1、令X为1
2、判断
X整除3余2,
X整除5余3,
X整除7余2,
不成立则:X为X+1(循环)
3、算出,则结束
4、输出答案
穷举法
请就近的四位同学组合成一小组,在2分钟内给出一个你们觉得最好的答案,并说出原因。
4
演示计算机执行过程
Private Sub Command1_Click()
Dim X As Integer, Y As Integer
X = 1: Y = 0
Do
If X Mod 3 = 2 Then
If X Mod 5 = 3 Then
If X Mod 7 = 2 Then
Y = X
End If
End If
End If
X = X + 1
Loop Until Y > 0
Print "韩信统御士兵数:"; Y
End Sub
如何改动代码?
穷举法
首先写出“整除3余2”的数:5,8,11,14,17,20,23……
其中,“整除5余3”的数:8,13,18,23……
其中,“整除7余2”的数:9,16,23……
由此得到,,23是最小的一个解。
Private Sub Command1_Click()
Dim X As Integer, Y As Integer
X = 5: Y = 0
Do
If X Mod 3 = 2 Then
If X Mod 5 = 3 Then
If X Mod 7 = 2 Then
Y = X
End If
End If
End If
x=x+3
Loop Until Y > 0
Print "韩信统御士兵数:"; Y
End Sub
思考:如何提升效率
演示计算机执行过程
Private Sub Command1_Click()
Dim X As Integer, Y As Integer
X = 9: Y = 0
Do
If X Mod 3 = 2 Then
If X Mod 5 = 3 Then
If X Mod 7 = 2 Then
Y = X
End If
End If
End If
x=x+7
Loop Until Y > 0
Print "韩信统御士兵数:"; Y
End Sub
首先写出“用3除余2”的数:5,8,11,14,17,20,23……
其中,“用5除余3”的数:8,13,18,23……
其中,“用7除余2”的数:9,16,23……
由此得到,,23是最小的一个解。
思考:如何再次提升效率
8
演示计算机执行过程
Private Sub Command1_Click()
Dim X As Integer, Y As Integer
X = 9: Y = 0
Do
If X Mod 3 = 2 Then
If X Mod 5 = 3 Then
If X Mod 7 = 2 Then
Y = X
End If
End If
End If
x=x+7
Loop Until Y > 0
Print "韩信统御士兵数:"; Y
End Sub
效率对比
Private Sub Command1_Click()
Dim X As Integer, Y As Integer
X = 5: Y = 0
Do
If X Mod 3 = 2 Then
If X Mod 5 = 3 Then
If X Mod 7 = 2 Then
Y = X
End If
End If
End If
x=x+3
Loop Until Y > 0
Print "韩信统御士兵数:"; Y
End Sub
Private Sub Command1_Click()
Dim X As Integer, Y As Integer
X = 1: Y = 0
Do
If X Mod 3 = 2 Then
If X Mod 5 = 3 Then
If X Mod 7 = 2 Then
Y = X
End If
End If
End If
X = X + 1
Loop Until Y > 0
Print "韩信统御士兵数:"; Y
End Sub
穷举法
顺向思路
逆向思路
23次
3次
7次
10
算法是程序设计的核心,是程序设计的灵魂。
算法的好坏直接影响着程序的通用性和有效性,影响着问题解决的效率。
总结
$$