3.3 简单算法及其程序实现 知识点题库

【加试题】在我国古代《孙子算经》中曾经提出这样一个问题,原文是这样的:“今有物,不知其数,三三数之,剩二;五五数之,剩三;七七数之,剩二;问物几何?”试用枚举算法来解决这一个问题。现分析如下,所寻找之数为满足如下条件的自然数:以3除余2,以5除余3,以7除余2。程序将从自然数1开始依次寻找,逐一判断某一自然数是否满足全部条件,直至在指定范围内找到满足条件的所有自然数。程序代码如下,请补充完整。

Private Sub Command1Click()
Dim p As Integer    ‘sum 用来统计符合条件的自然数个数
Dim n As Integer
Dim max As Integer   ‘指定查找范围的最大自然数
List1.Clear
p = 0
max = Val(Text1.Text)    ‘Text1文本框中输入
n = 0
Do While n <= max
  n = n + 1            ‘从自然数1开始不断往上寻找
  If       ①      Then
  List1.AddItem Str(n)    ‘找到后在List1中显示结果
  p=p+1
  End If
Loop
List1.AddItem ("共计" + Str(n) + "个")       ‘②
End Sub
  1. (1) 程序中①处划线应填入
  2. (2) 程序②处一句话中有错误,应该为
下列问题中适合使用枚举算法解决的是(   )
A . 在一串不相同的钥匙中寻找微格教室的前门钥匙 B . 计算五个同学的信息技术平均分 C . 找出笔筒中红色的签字笔 D . 超市的促销方案
【加试题】有一组正整数,要求对其中的数据进行排列, 排列后奇数在前, 偶数在后。其中最后一个数据排到奇数与偶数交接处;自前到后的第一个偶数排到最后一个位置,空出的位置排列自后向前的第一个奇数,依此类推。排序示例如下。

实现上述功能的 VB 程序如下,但加框处代码有错,请改正。

Const n = 10

Dim a(1 To n) As Integer

Private Sub Command1_Click()

    Dim i As Integer, j As Integer

    Dim temp As Integer, flag As Boolean

    '读取一组正整数,存储在数组a中,代码略

    i = 1: j = n

    temp = a(j): flag = True

    Do While i < j

        If flag Then

            If a(i) Mod 2 = 0 Then

                a(j) = a(i)

                j=j-1

                flag=Not flag

            Else

                    '⑴

            End If

        Else

            If a(j) Mod 2 = 1 Then

                a(i)=a(j)

                flag=Not flag

            Else

                j=j-1

            End If

        End If

    Loop

         '⑵

    '依次输出排序后的数据,代码略。

End Sub

 ⑵

下面这个程序实现了把一个十进制数转换成八进制数。

  1. (1) 要是按钮命令显示文本改为“转换”,可在属性窗口中属性的属性值改为“转换”。
  2. (2) 为实现上述功能,请在划线处填入合适代码。

    Private Sub Command1_Click()

    Dim n,m As Integer

    Dim ch,s As String

    s = "01234567"

    ch = ""

    Do While n > 0

        m = n Mod 8

       

        n = n \ 8

    Loop

    Text2.Text = ch

    End Sub

穷举法的适用范围是(   )
A . 一切问题 B . 所求问题的解无限多 C . 所求问题解的个数有限且有明确的条件 D . 所求问题解的个数有限且无明确的条件
一辆卡车运矿石,晴天每天运20次,雨天每天最多运12次,他一共运了8天,共112次,则晴天和雨天各有几天。用VB程序来解决这个问题,单击按钮Command1,在文本框Text1中输出晴天的天数,在文本框Text2中输出雨天的天数,程序代码如下:

Private Sub Command1_Click()

 i=1

 j=7

 Do While ________

i=________

j=________

 Loop

 Text1.Text=Str(i)

 Text2.Text=Str(j)

End Sub

则下列说法正确的是(  )

A . ①应填的代码为 i*20+j*12<>112 B . ②应填的代码为i-1 C . ③应填的代码为j+1 D . 描述该算法的思想为解析算法
小宇为选定班级参赛作品编了一个VB程序,设计如下:在文本框Textl中输人5位评委对3个作品的评分依据(评委对作品的评分数据由3位十进制数组成,第1位对应作品编号,第2、3位对应作品得分,分值范围为[60,99]。如“275”表示2号作品得分75)。单击“计分”按钮后,在标签Iabell中输出3个作品的平均分,在Label2中输出参赛的作品(选择最高平均分作品参赛,若最高平均分存在并列,则从并列作品中随机抽取)。程序运行界面如图所示。

  1. (1) “计分”按钮的对象名为
  2. (2) 程序部分代码如下,请在划线处填入合适的代码.

    Private Sub jf_Click()

    Dim s As String, d As String, i As Integer

    Dim f1 As Single, f2 As Single, f3 As Single

    s = Text1.Text

    i = 1

    Do While   ①   

      d = Mid( s, i, 3)

      If Mid(d, 1, 1)= "1" Then

        fI = fl + Val(Mid(d,  2, 2))

      Elself Mid(d, 1, 1)="2" Then

        f2 = f2 + Val(Mid(d,  2,  2))

      Else

        f3 = f3 + Val(Mid(d,  2, 2))

      End If

         ②   

    Loop

    Label1.Caption = "作品1平均分为:"+Str(fl/5)+"作品2平均分为:"+Str(f2/5)+"作品3平均分为:"+Str(f3/5)

    '以下省略“处理并列最高平均分,并在 Label2中输出选取的参赛作品”的代码

    End Sub

  3. (3) 运行该程序时,在文本框Textl中以不同的顺序输入原评分数据:380/295/283/170/180/385/372/285/190/180/390/384/272/170/276,单击“计分”按钮,则Labell中显示的结果(选填:会/不会)发生改变。
“四环八数”幻圆指的是将1~32的自然数不重复地排列至4个同心圆环,实现各圆环上的数字之和均为132,8条半径上数字之和也均为66。

编写“幻圆求解”VB程序,实现如下功能:

单击“随机出题”按钮Command 1,按照圆环从外向里,每个圆环从12点位置开始按顺时针方向,将32个位置上的数字依次存入a数组,若某位置上的数字空缺则其值为0,空缺的数字最多不超过10个,并确保随机生成的数据有解,在列表框List 1中按4行8列的形式输出a(1) ~a(32)的值,若值为0则显示[]。

单击“显示结果”按钮Command 2,从第1个空缺位置开始,验证该位置是否为本行上的唯一空缺或是本列上的唯一空缺,如果不是则验证下一位置;否则输入其值并回到第1个空缺位置重新开始验证,直至所填满所有的空缺。最后,将结果按规定格式输出在列表框List 2中,程序运行界面如图所示:

  1. (1) 根据题意,结合图中给出的数据,第1个填入值的数组元素是     
    A . a(5) B . a(8) C . a(10) D . a(29)
  2. (2) 请在划线上填入合适的代码

    Dim a(1 To 32) As Integer

    Dim b( 1 To 10) As Integer

    Private SubCommand1_Click()

        '随机生成有解的数据,并在列表框

    List1中输出,代码略

    End Sub

    Private Sub Command2_Click()

        Dim n As Integer, i As Integer, x As Integer

    n=0

        For i= 1 To 32

            If a(i) = 0 Then

               n=n+1:b(n)=i

            End If

        Next i

        x=1

        Do While x<=n

            If a(b(x) ) = 0 Then

              If   ①   Then x= 0

            End If

            x=x+1

        Loop

        '将结果按规定格式在列表框List2中输出,代码略

    End Sub

    Function R check(x As Integer) As Boolean

        Dim count As Integer, sum As Integer, y As Integer, i As Integer

        check=False

        If a(x) <>0ThenExit Function

        count=0:sum=0:y=  ② 

        For i= 1 To 8

           If a(y*8+i) = 0 Then count =count+ 1

            sum=sum+a(y*8+i)

        Next i

        If count = 1 Then

            a(x)=   ③   :R check=True

        End If

    EndFunction

    Function C check(x As Integer) As Boolean

        '用于验证是否为本列唯一空缺, 如果是则填入值并返回True, 否则返回False

        '实现上述功能的代码略

    EndFunction

铁路托运行李是根据行李的质量收费的,标准如下:若不超过50千克,按每千克0.35元收费;若超过50千克,超过部分则按每千克0.5元收费,但行李质量不得超过150千克。

设计一个VB程序,通过在文本框Text1输入托运行李的质量,计算并输出托运行李的费用,行李质量超过150千克,则显示“行李超重!”。结果在文本框Label1中显示。程序运行界面如图a所示。

  1. (1) 在设计程序界面时,应使用图b所示的“控件工具箱”中的(填写相应编号)添加“Label1”对象。
  2. (2) 解决铁路托运行李费用计算问题采用的算法是(填字母:A .解析算法/B .枚举算法)。
  3. (3) 实现上述功能的VB程序如下,请在画线处填入合适的代码。

    Private Sub Command1_Click( )

      Dim x As Double,y As Double

          ①    

      If x>150 Then

        Label1l.Caption="行李超重!"

      Else

        If   ②   Then

          y=0.35*50+0.5*(x-50)

        Else

          y=0.35*x

           ③   

        Label1.Caption="行李收费"+   ④   十"元"

      End If

    End Sub

    画线处应填入的代码为:①;②;③;④

某市公共自行车24小时内租车收费标准为:每次1小时内免费,超时后按1元/小时收取(超时不足1小时按1小时计),24小时内最高限额为10元。
  1. (1) 若用变量pay存储租车费用,用变量time存储租车时间,根据题中的收费标准,租车费用pay与租车时间time之间的关系可用数学公式描述为
  2. (2) 公共自行车租车费用pay的计算可用解析算法,具体描述如下,请补充完善。

    ①给定24小时内的租赁起始时间和结束时间:输入租赁开始的时间和结束的时间。注:时间的输入格式为hh:mm:ss,如10:23:11。

    ②计算租车时间time:计算租车起始时间和结束时间的时间差time。

    ③计算租车费用pay:若time小于等于1,则pay为0;若,则pay为time;若time大于10, 则pay为10。

  3. (3) 编写程序。用变量stime、etime、time、pay分别存储租车开始时间、租车结束时间、租车时间和租车费用。计算公共自行车租赁费用的某Python程序如下,请在划线处填入相应代码,实现程序功能。

    Stime=input('租车开始时间:')

    etime=input('租车结束时间:')

    #stime.split(":")[0]切出的是租车开始时间的时

    #stimespli(":")[1]切出的是租车开始时间的分

    #stime.split(":")[2]切出的是租车开始时间的秒

    if int(etime. split(":")[0])>=int(stime.split(":")[0]):

    time=int(etime. split(":")[0])-int(stime.spilt(":")[0])

    if int(etime.split(":")[1]>int (stime.split(":"))[1):

        time=time+1

    elif int (etime.split(":")[1])= int(stime.split(":")[1]) and int(etime.split(":")[2]>= int(stime.split(":")[2]):

        time= time+1

    if time<=1:

        pay=0

    elif

        pay=time

    else:

         

    print(pay)

  4. (4) 完善该程序后,运行程序,输入租车开始时间为“9:40:6”,租车结束时间为“15:35:32”,则程序运行结果为
为了保护学生视力,教室里安装了不少日光灯管。假设每个教室有40W灯管18个,每个整流器5W,每度电0.55元,每天用电12小时,每个教室每天的电费要多少?编程解决此问题最合适的算法是(   )。
A . 顺序查找算法 B . 解析法 C . 递归算法 D . 穷举法
分析完善程序。

假设银行的年存储利率为3%,如果现在存储10000元钱,问多少年后连本带利超过12000元。设定:连本带利=本金*(1+利率)∧年数

假设n年后连本带息超过12000,根据题意得出数学关系式:10000*(1+3%)∧n>12000,求最小的n。

(参考程序)

Dim s as single

Dim r as single

Dim n as integer

s=10000

r=0.03

n=0

Do while            

    n=n+1

    s=s*(1+r)

Loop

Print n;“年后”:“连本带利超过”;s

根据上述回答下列问题:

  1. (1) 本题采用的算法是(填写:解析法/穷举法/排序法/递归法)
  2. (2) 写出参考程序中空白处表达式
阅读程序,回答问题。
  1. (1) 将程序中的空白处补充完整。

    Private Sub Form_Click()

        Dim y, s, n As Integer

        n = InputBox("输入n")

        y = 0:

        Do While n \ 10 <> 0

            y = n Mod 10

            s = s + y

            n = n \ 10

        Loop

       

        Print s

    End Sub

  2. (2) 将流程图中的空白处补充完整。

    ①处应填写:;②处应填写:

  3. (3) 若输入n的值为62,程序执行完毕,s的值是,该程序采用类型的算法。(解析法/穷举法)
用枚举算法求解“找出所有满足各位数字之和等于5的三位数”时,在下列所列举的数值范围内,算法执行效率最高的是(   )
A . 从0到999 B . 从100到999 C . 从100到500 D . 从104到500
有如下所示VB程序段:

str1 = “ABCDEFGHIJKLMNOPQRSTUVWXYZ”

s = “”

For i = 1 To 4

    t = Int(Rnd*10) + 1

    If t Mod 2 = i Mod 2 Then

        t = t + 1

    Else

        t = t + 2

    End If

    s = s + Mid(str1,t,1)

Next i

List1.AddItem s

执行该程序段后,列表框List1中可能显示的内容是(   )

A . BADC B . BCDY C . DEFG D . CDEF
解决问题:求m和 n的最大公约数。根据以下算法描述,回答问题。

①输入m,n

②以m为被除数,n为除数,r为m除以n的余数

③判断r的值

若r=0,输出公约数n

若r≠0,则n将赋值给m,再将r赋值给n,转为执行步骤②

  1. (1) 上述算法的描述方式是
  2. (2) 若 m=2018,n =20,则最大公约数是
  3. (3) 这个算法是著名欧几里德算法,又称
  4. (4) “r 为 m 除以 n 的余数”的 VB 语句是
  5. (5) 上述算法是用程序的结构实现。
小明的支付宝帐号密码忘记了,但他还零星记得有关于密码的一些信息:

①密码是八位数字,前两位为19

②最后两位数字是91

③能被77和133整除

程序界面如图所示,单击“找回密码”按钮(Command1)后,可能的密码显示在列表框List1中。

解决此问题的相应的程序如下:

Private Sub Command1_Click()

    Dim i As Long, s As Long

    For i = 0 To 9999

        s =  ①                  's表示该八位数密码

        If    ②   Then            '符合密码的条件,s能被77和133整除

            List1.AddItem Str(s)

        End If

    Next i

End Sub

  1. (1) 在应用程序界面设计时,添加“List1”对象用于显示可能的密码,应使用如图所示的“控件工具箱”中的(填写相应的编号)。
  2. (2) 将窗体Form1上显示的文本“Form1”改为“寻找密码”,可在其属性窗口中将属性的属性值修改为“寻找密码”。
  3. (3) 解决此问题的算法是。(填:枚举算法/解析算法/查找算法)
  4. (4) 在程序下划线处,填入适当的语句或表达式,把程序补充完整:

     ② 

以下适合用解析法解决的问题是(      )。
A . 计算出租车费 B . 求符合要求的三位正整数的“水仙花数” C . 将10个评委的打分按由大到小的顺序排序 D . 找出一筐乒乓球质量不符合标准的球
实现枚举算法一般采用(     )的算法结构模型。
A . 循环套循环 B . 分支套循环 C . 循环套分支 D . 分支套分支
[枚举的综合应用]在一个数组中存储了若干个同学的技术成绩小题分,其中a(1)存储学生个数,a(2)开始按顺序存储小题分数据。每个学生有33个小题的数据,例:a(2)~a(13)是学生1的信息选择题得分,a(27)~a(30)是学生1的信息4个主观题得分。具体如下表

题号

1-12

13-25

26-29

30- 33

科目题型

信息客观题

通用客观题

信息主观题

通用主观题

满分分值

每题2分

每题2分

4/8/7/7

6/9/3/6

小李根据上述描述,设计了一个统计所有同学信息各题得分率的算法。程序运行后首先在列表框List1显示信息技术各小题得分,单击“计算”按钮“Command1",在列表框List2显示信息各题的题号和得分率,在文本框Text1输出所有同学的信息平均分(平均分=各题得分率*分值之和)。算法的VB程序如下,回答下列问题。

  1. (1) 根据题目描述,使用如图所示数据,a(95)的数值是
  2. (2) 在程序划线处填上合适代码,使程序完整。

    Dim a(1 To 1000) As Integer, n As Integer

    Private Sub Command1_Click()

        Dim i As Integer, j As Integer

        Dim fz(1 To 16) As Integer     'fz数组存储信息各题满分值

        Dim b(1 To 33) As Double    '数组b存储全卷各题的平均得分

        For i=1 To 16    '数组fz存储信息16个小题的满分值   

            If i<= 12 Then fz(i)=2

            fz(13)=4 : fz(14)=8 : fz(15)=7 : fz(16)=7

        Next i

        For i=2 To n      '把数组a数据分别统计到各题中

           

            b(j)=a(i)+ b(j)

        Next i

        For i=1 To 33    '仅处理信息各题的平均分

            If i<= 12 Then

                b(i)=b(i) / (a(1) * fz(i))      ' 计算信息选择题各题的得分率

            ElseIfi>= 26 Andi<= 29 Then

                b(i)=

            End If

        Next i

        For i=1 To 16

            If i> 12 Then j=i+13 Else j=i

            b(j)=Int(b(j) * 1000+0.5) / 10      '对结果四舍五入保留1位小数

            List2. AddItem Str(i) 十Str(b(j))+"%"

            ave=

        Next i

        Text1. Text=Str(ave / 100)

    End Sub

    Private Sub Form_ Load()

        '读入数据到数组a,数据个数n,代码略

    End Sub

最近更新