内容正文:
专题十八 解析算法
1
PART
01
概念
2
关键一:建立正确的数学模型(得出正确的数学计算式)
关键二:保证计算机过程描述的正确性(用正确合理的VB变量、表达式来表示已经得出的数学计算式)
程序实现
PART
02
注意点
5
解析算法的代码特征不明显,一般代码中会出现公式计算,但有公式计算机不一定就是解析算法。
出现了循环语句或条件语句等复杂的程序结构也不一定不是解析算法。
分段函数解决问题一般可归为解析算法。
辗转相除法求公约数、公倍数、除n取余法实现进制转换等都是解析算法。
PART
03
典例分析
7
(2018改编,12分)某同学非常喜欢吃零食,其家长为了控制其零食摄入,每天只允许他用n元钱买零食,新纪元高中小卖铺零食非常单一,该同学只能买两种价格分别为a、b的零食(a≠b,且家长给的钱至少可买1份零食)。一天中若该同学购买的零食金额超过n元,接下来的一个月就不能购买零食,为了避免发生这种情况且每天要吃数量尽可能多的零食,请你编程帮他计算购买两种零食的数量(注:在零食总数相同的情况下,要购买尽可能贵的零食,花的钱越多越好),在文本框Text1中输入钱数n,在文本框Text2中输入第一种零食的价格a,在文本框Text3中输入第二种零食的价格b,单击“计算”按钮Command1后在标签Label1中输出最佳组合的情况。
1
小提示
本题的难点在于购买零食总数相同的情况下,要尽可能购买贵的零食,花的钱越多越好,如案例所示,从数量上考虑购买的零食组合有11和0,10和1,8和3,显然8和3的组合是最优的(在不超过预算并且数量保持不变的前提下,买到了最多昂贵的零食)由此设置了二种算法来解本题。
方法一:流程图如图所示。
程序代码如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim a As Integer, b As Integer, acount As Integer, bcount As Integer
Dim yu As Integer, chajia As Integer,n As Integer
n = Val(Text1.Text):a = Val(Text2.Text):b = Val(Text3.Text)
If a < b Then
acount = n \ a ′ 购买便宜零食的份数
yu = n Mod a ′ 购买便宜零食后剩余的钱
chajia = b - a ′ 两种零食的差价
bcount = ① ′ 若剩余的钱是差价的倍数,那么为了 ′把钱尽可能花完,可减少便宜的零食并增加昂贵的零食
acount = acount - bcount
yu\chajia
Else
bcount = n \ b ′ 购买便宜零食的份数
yu = n Mod b ′ 购买便宜零食后剩余的钱
chajia = a - b ′ 两种零食的差价
② ′ 若剩余的钱是差价的倍数,那么
′为了把钱尽可能花完,可减少便宜的零食并增加昂贵的零食
bcount = bcount - acount
End If
Label1.Caption = "第一种零食购买"& Str(acount)& "份 第二种零食购 买"& Str(bcount)&"份"
End Sub
acount=yu\chajia
方法二:流程图如图所示。
程序代码如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim a As Integer, b As Integer, acount As Integer
Dim bcount As Integer, temp As Integer,n As Integer
Dim flag As Boolean
n = Val(Text1.Text):a = Val(Text2.Text):b = Val(Text3.Text)
If a > b Then
temp = a:a = b:b = temp
flag = True
End If
acount = n \ a ′ 购买便宜零食的数量
bcount = ① ′剩余的钱数被差价整
′除所得即为昂贵零食的数量
(n-a*acount)\(b-a