枚举算法及程序实现 知识点题库

下列问题中适合使用枚举算法解决的是(   )
A . 计算两个数的乘积 B . 计算50个同学的平均分     C . 查找200以内所有能被7整除且个位数字为5的自然数 D . 设计主题班会
如果两个质数的差为2,则这两个质数称为孪生质数对;编写VB程序,实现如下功能:单击“显示孪生质数对”按钮Command1,在列表框list1中显示100以内的所有孪生质数对(运行效果如图所示)。

实现上述功能的VB代码如下, 但划线处代码有错,请改正。

Dim a(1 To 50) As Integer

Private Sub Command1_Click()

Dim i As Integer

k = 0: i = 3

Do While i <= 100

   If  ① prime(i)   Then      ‘⑴

      k = k + 1

      a(k) = i

   End If  

   i = i + 2

Loop

For i = 2 To k

   If   ②a(i) = a(i +1)+2   Then   ‘⑵

      List1.AddItem Str(a(i - 1)) + "和" + Str(a(i))

   End If

Next i

End Sub

Function prime(x As Integer) As Boolean

prime = False

For i = 2 To Int(Sqr(x))

   If  x Mod i = 0  Then

      prime = True

      Exit For

   End If

Next i

End Function

  ②  

VB程序设计。某微群采用问题验证的加入方式,如图1所示:

1

徐明设计了一个VB程序用于寻找这个以211开头、可被2012整除的6位数。其算法流程图如图2所示,程序界面如图3所示,程序的代码编辑窗口如图4所示。

2


  1. (1) 图2所示流程图中采用的算法为(填:解析算法 / 枚举算法)。
  2. (2) 在图3所示窗体中,创建label2对象的方法正确的是          (填字母)。
    A . 双击工具箱中的“ ”控件 B . 单击工具箱中的“ ”控件,然后在窗体中按住鼠标左键拖曳
  3. (3) 在图3所示窗体的标题中显示 “寻找验证问题的答案” 字样,是通过修改该窗体对象的 (填:Font / Caption / Top)属性的值实现的。
  4. (4) 图4中的VB程序代码在(填:加载窗体 / 单击Label2 / 单击Command1)对象时被驱动执行。
  5. (5) 徐明在代码编辑窗口中,输入“Label2.”后出现如图5所示的信息,其中的“BackColor”是Label2的(填:事件名 / 对象名 / 属性名)。

    5

  6. (6) 图4中VB程序划线处应填写的代码为
  7. (7) 运行图4中VB程序后,弹出图6所示的出错信息提示,此时程序正执行的语句是 (填字母),改正该错误应修改的语句是(填字母)。

    6

    A.Dim k As Integer

    B.For k = 211000 To 211999

    C.Label2.Caption = Str(k)

  8. (8) 保存工程后,徐明发现结果文件夹中产生了yzwt.frm、yzwt.vbp、yzwt.vbw三个文件,其中窗体文件是
【加试题】火柴棍可以拼成数字0~9,拼法如图1 所示。

图1

输入火柴棍的数量n(n≤24),计算可以拼出多少个“A+B=C”的等式?要求:

① 加号与等号各自需要两根火柴棍。

② A、B、C为非负的整数,且该数非零时,最高位不能是0。

③ 如果A≠B,则A+B=C 与B+A=C 视为不同的等式。

④ n 根火柴棍必须全部用上。

小明发现,数字1用的火柴棍最少,24根火柴棍全部用上的话,能拼出最大的整数A或B不超过1111,C不超过2222。他编写了一个VB 程序,在文本框Text1中输入火柴棍的数量,单击“统计”按钮Command1,在文本框Text2中输出“A+B=C”的方案数,程序界面如图2所示。

图2

实现上述功能的VB程序如下,请回答下列问题:

  1. (1) 请在划线处填入合适的代码。

    Private Sub Command1_Click()

    Dim a(0 To 2222) As Integer '存储每个整数需用的火柴棍数

    Dim n As Integer, ans As Integer

    Dim i As Integer, j As Integer

    n = Val(Text1.Text)

    For i = 0 To 2222

    a(i) = 0

    Next i

    '得到0~9 中每个数字需用的火柴棍数

    a(0) = 6: a(1) = 2: a(2) = 5: a(3) = 5: a(4) = 4

    a(5) = 5: a(6) = 6: a(7) = 3: a(8) = 7: a(9) = 6

    n = '去掉等号与加号后,剩余的火柴棍数量

    For i = 10 To 2222 '计算出10~n 中每个数字需用的火柴棍数

    a(i) = a() + a(i Mod 10)

    Next i

    ans = 0

    '枚举0~n 中任意两个数,判断~否符合A+B=C 的火柴棍数量

    For i = 0 To 1111

    For j = 0 To 1111

    If a(i) + a(j) + a() = n Then

    ans = ans + 1

    End If

    Next j

    Next i

    Text2.Text = Str(ans)

    End Sub

  2. (2) 输入的火柴棍的数量为14 时,方案数为 。
由n行数字组成的数字三角形如图所示。设计一个算法,对于由n行数字组成的数字三角形(数字范围[1,50],计算从三角形的顶至底的路径经过的数字和的最大值,每一步可以从当前点走到左下方的点也可以走到右下方的点。

寻求路径最大值的算法设计如下:

按三角形的行划分,若有n行,则有n-1个步骤

①从底层开始,本身数即为最大值

②倒数第二层的计算取决于底层的数据:

12+6=18,13+14=27,24+15=39,24+8=32;

③倒数第三层的计算取决于底二层的数据:

27+12=39,39+7=46,39+26=65;

④倒数第四层的计算取决于底三层的数据:

46+11=57,65+8=73;

④最后的路径:13—8—26—15—24其和为86。

根据上述算法描述,设计程序界面如下图所示,点击“生成金字塔”按钮,在列表框中生成数字金字塔,点击“寻求路径最大值”按钮,在文本框text1中输出最大值。

依据上述描述设计如下VB程序:

Const n = 5

Dim sx As String

Dim i, j, k, a(1 To 100) As Integer Private Sub Command1_Click() List1.Clear

For i = 1 To n For j = 1 To i

    ①  

sx = sx + Str(a((i - 1) * n + j)) Next j

For k = n To i Step -1 sx = " " + sx

Next k List1.AddItem sx sx = ""

Next i End Sub

Private Sub Command2_Click() For i = n To 1 Step -1

For j = 2 To i

If    ②   Then

a((i - 2) * n + j - 1) = a((i - 1) * n + j - 1) + a((i - 2) * n + j - 1)

Else

a((i - 2) * n + j - 1) = a((i - 1) * n + j) + a((i - 2) * n + j - 1)

End If Next j

Next i

    ③  

End Sub

请回答下列问题:

  1. (1) 若数字金字塔如图 ,输出路径最大值是
  2. (2) 请在①②③划线处填入合适的代码。

     ② ③ 

玫瑰花数是一个四位正整数,该数每一位上的数字4次方之和等于它本身。如:1634=14+64+34+44,小张设计VB程序用于找出所有可能的玫瑰花数,程序运行界面如下图所示。

  1. (1) 在窗体中要显示玫瑰花图像(文件名为flower.bmp),需添加图像框image1,并设置其属性(单选,填字母:A .Image/B .Pictrue/C .Caption/D .Text)的值为“flower.bmp”。
  2. (2) 为实现上述功能,请在划线处填入合适的代码。

    Private Sub Command1_Click()

     Dim sum As Integer, a As Integer, b As Integer

     Dim i As Integer, c As Integer, d As Integer

     List1.Clear

     sum = 0      '玫瑰花个数

     For i = 1000 To 9999

    a = i Mod 10     '求个位上的数字

     b =①       '求十位上的数字

     c = i \ 100 Mod 10       '求百位上的数字

     d = i \ 1000         '求千位上的数字

     If a ^ 4 + b ^ 4 + c ^ 4 + d ^ 4 = i Then

     List1.AddItem Str(i)

    End If

     Next i

     Label1.Caption = "玫瑰花个数为:" + Str(sum)

    End Sub

  3. (3) 解决该问题主要采用的算法是
分析完善程序。

一百个铜钱买了一百只鸡,其中公鸡一只5钱、母鸡一只3钱,小鸡一钱3只,问一百只鸡中公鸡、母鸡、小鸡各多少?设一百只鸡中公鸡、母鸡、小鸡分别为x,y,z,这里x,y,z为正整数 , 设计算法并编写程序输出所有的买鸡方案。

Dim x As Integer, y As Integer, z As Integer

For x = 1 To 20

For y = 1 To 33

For z = 3 To 99 Step 3

If               Then

Print "公鸡:" & x, "母鸡:" & y, "小鸡:" & z

Next z

Next y

Next x

End Sub 代码可以简化,思路大致是这样的。

结果是: 公鸡:4 母鸡:18 小鸡:78

公鸡:8 母鸡:11 小鸡:81

公鸡:12 母鸡:4 小鸡:84

根据上述回答如下问题

  1. (1) 本题采用的算法是(填写:解析法/穷举法/排序法/递归法)
  2. (2) 程序代码中空白处应填写的条件是            
    A . x+y+z=100 and 5x+3y+z/3=100 B . x+y+z=100 or 5x+3y+z/3=100 C . x+y+z=100 and 5*x+3*y+z/3=100 D . x+y+z=100 or 5*x+3*y+z/3=100
一个正整数x,如果它的平方数的最后几位数字和这个数相等,则该数为同构数。例如:5的平方数是25,且5出现在25的右侧,那么5就是一个同构数。设计程序,输出1000-9999间的同构数x,并统计个数。
  1. (1) 本题适用的算法是和此算法的基本结构是(    )。
    A . 查找算法,循环中嵌套分支 B . 枚举算法,循环中嵌套分支 C . 查找算法,循环中嵌套循环 D . 枚举算法,循环中嵌套循环
  2. (2) 判断1000-9999范围内的整数x是同构数的条件是(     )。
    A . x=x mod 1000 B . x=x^2 mod 1000 C . x=x mod 10000 D . x=x^2 mod 10000
  3. (3) 编写程序,实现算法功能。
   有一种算法是把所有可能的答案一一列举,合适就保留,不合适就丢弃。这种方法称作。枚举法解决问题的一般结构:
10个数据“23,15,51,36,78,47,39,9,88,96”依次存放在列表a中,使用如下Python程序段找出大于70的数的个数。

a=[23,15,51,36,78,47,39,9,88,96]

n=0

m=70

for i in range(0,10):

    if            

        n+=1

print("个数:",n)

程序中划线处的代码应为(    )

A . a[i]>n B . a[i]<n C . a[i]>m D . a[i]< m
设有n盏灯,放在一排。从1 到 n依次顺序编号。有 n个人也从1到n依次编号。第1个人(1号)将灯全部关闭,第2个人(2号)将凡是2的倍数的灯打开,第3个人(3号)将凡是3的倍数的灯做相反处理(该灯如果为打开的,则将它关闭,如关闭的将它打开),以后的人和3号一样,将凡是自己号数倍数的灯做相反处理。问当n个人操作后,哪几盏灯是亮的。(亮灯为0,关闭为1)

为了实现这一目标,完善下列程序,使之能完成该功能。

Private Sub Command1_Click()

    Const n=20

    Dim i As Integer, j As Integer

    Dim a(1 To n) As integer

    For j=1 To n

        a(j)=0

    Next j

    For i=1 To n

        For j=1 To n

            If j Mod i=0 Then

                

            End If

        Next j

    Next i

    For j=1 To n

        If Then List1.AddItem Str(j)

    Next j

End Sub

编写程序输出100~200之间不能被3整除的自然数,并统计出符合条件的个数。

程序如下:

Private Sub Form_Click()

    Dim i As Integer

    Dim t As Integer

    For i = 100 To 200

        If Then           '不能够被3整除的条件

            Print i

            t=t+1

        End If

    Next i

End Sub

程序运行结束后t的值为

下列问题适合使用枚举算法解决的是(   )
A . 计算已知半径的圆面积 B . 计程车计费 C . 校园歌曲大赛的成绩排名 D . 找出1000以内的所有素数
小强在双十一购物期间忘记了支付宝账户密码,但他急用支付宝进行转账,请你帮他尽可能找回密码。他只记得自己密码的一些零星信息:

①密码是六位数字,前面两位为59;②最后两位数字相同;③能被12和38整除。

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

  1. (1) 应用程序界面设计时,为添加“List1”对象,应使用图2所示的“控件工具箱”中的(填写相应编号)。
  2. (2) 请根据题意将解决此问题的相应程序补充完整。

    Private Sub Command1_click( )

        Dim x As Integer, s As Long

        Dim y As Integer, i As Integer

        For i = 0 To 9999

            s = 590000 + i

            If Then

                x= s mod 10

                y =

                If x = y Then

                    List1.AddItem Str(s)

                End If

            End If

        Next i

    End Sub

  3. (3) 该模块采用的算法是(   )
    A . 枚举 B . 查找 C . 排序 D . 解析
尼克斯彻定理:任何一个大于等1的整数的立方等于一串连续奇数之和,如:13=1,23=3+5,33=7+9+11。编写一个VB程序验证尼克斯彻定理,程序运行时,在文本框Text1中输入一个于等于1的整数,单击“验证”按钮Command1,在文本框Text2中显示验证结果,运行界面如图所示。

实现上述功能的VB代码如下,请完善代码:

Private Sub Command1_Click()

    Dim n As Integer, i As Integer, t As Integer, sum As Long, s As String

    n=Val(Text1.Text)

    For i=1 To n^3 step 2           '变量i表示连续奇数的首个整数

        sum=0:t=i:flag=False

        Do While sum<n^3 And flag= False

            sum=

            t=t+2

            If Then flag=True

        Loop

        If flag=True Then Exit For

    Next i

    s=Str(n)+ "^"+Str(3)+ "="

    Do While sum>0

       

        If sum= 0 Then

            s=s+Str(i)

        Else

            s=s+Srt(i)+ "+"

        End If

        i=i+2

    Loop

    Text2.Text=s

End Sub

关于枚举法,下列说法错误的是(    )
A . 枚举法的基本思想就是,根据问题的部分已知条件预估解的范围,并在此范围内对所有可能的情况进行逐一验证,直到找到满足已知条件的解为止 B . 枚举范围的大小直接影响着枚举法的执行效率 C . 枚举法,也称蛮力法或暴力搜索法,理论上利用这种方法可破解任何一种密码 D . 枚举范围中的判定条件直接影响着枚举法的执行效率
幼儿园罗老师在班级活动课将全班小朋友进行分组:每3个小朋友组成1个小组,最后多出1个小朋友,每4个小朋友组成1个小组,最后也多出1个小朋友,每5个小朋友组成1个小组,最后1个小组差1个小朋友。若该班级小朋友不超过50人,编写VB程序实现求出当前班级至少有多少个小朋友,并将结果显示在文本框Text1中。程序设计界面如图所示。

  1. (1) 在设计程序界面时,要清空文本框中的显示内容,应修改该文本框中的属性。
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Private Sub Command1_ Click()

        Dim flag As Boolean,i As Integer,d As Integer

        Dim t3 As Integer,t4 As Integer,t5 As Integer

        i=5:flag= True

        Do While i<= 50 And flag

            t3=i Mod 3

            

            t5=i Mod 5

            If (t3=1) And (t4=1) And (t5=4) Then

                

                flag= Flase

            End If

            i=i+1

        Loop

        Text1. Text = Str(d)

    End Sub1

  3. (3) 运行该程序,在文本框Text1中显示的值是
[枚举的综合应用]在一个数组中存储了若干个同学的技术成绩小题分,其中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

下列选项中,适合用穷举法编程解决的问题是(     )
A . 找出100以内所直的素数 B . 画出100个同心圖 C . 算50个学生成绩的平均分 D . 比较两个同学的成绩
现要找出200以内的能被4或5或6整除的正整数,用计算机解决该问题时应采用的算法是