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

【加试题】在我国古代《孙子算经》中曾经提出这样一个问题,原文是这样的:“今有物,不知其数,三三数之,剩二;五五数之,剩三;七七数之,剩二;问物几何?”试用枚举算法来解决这一个问题。现分析如下,所寻找之数为满足如下条件的自然数:以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) 程序②处一句话中有错误,应该为
在我国古代《孙子算经》中曾经提出这样一个问题。原文是这样的:“今有物,不知其数,三三数之,剩二;五五数之,剩三;七七数之,剩二;问物几何?”。现分析如下,所寻找之数为满足如下条件的自然数:以3除余2,以5除余3,以7除余2,程序将从自然数1开始依次寻找,逐一判断某一自然数是否满足全部条件,直至在指定范围内找到满足条件的所有自然数。程序界面如右图,文本框名为Text1,用于录入最大自然数;列表框名为List1,用于输出结果。

程序代码如下:

Private Sub Command1_Click()

  Dim sum As Integer    'sum用来统计符合条件的自然数个数

  Dim n, max As Integer

  List1.Clear

  sum = 0

  max = _______①______    '指定查找范围的最大自然数,在text1框中输入

  n = 0

  Do While n <= max

n = n + 1  

    If _______   _②         ___  Then

List1.AddItem Str(n) '

    ________③_______

    End If

  Loop

  List1.AddItem ("共计" + Str(sum) + "个")   

End Sub

  1. (1) 解决该问题所用到的是(填解析算法/枚举算法)。
  2. (2) 程序中①划线处应填入
  3. (3) 程序中②划线处应填入
  4. (4) 程序中③划线处应填入
小明设计了一个Visual Basic程序:求 1~n(不超过10000)之间能被5整除但不能被3整除的自然数。其设计界面如图1所示、代码编辑窗口如图2所示。

                   图1

 

                      图2

  1. (1) 解决此问题主要采用的算法为(填:解析算法 / 枚举算法)。
  2. (2) 图2中标注A处应填写的代码为
  3. (3) 图2中List1.AddItem Str(i)语句中AddItem是List1的(填: 事件/属性/方法)。
问题:在“1390771”号段的11位手机号码中,统计出最后两位数字相同的号码个数。

如13907715200、13907718366是符合条件的两个号码。

算式描述如图所示

请将程序补充完整

Private Sub Form_Cliek()

Dim a As Integer, b As Integer

Dim I As Integer, s As Integer

s=0

For =10000 To 19999

a=

b=(i Mod 100)\10

If a=b Then

s=

End If

Next i

Print“最后两位数字相同的号码个数有:”;

End Sub

小强在双十一购物期间忘记了支付宝账户密码,但他急用支付宝进行转账,请你帮他尽可能找回密码。他只记得自己密码的一些零星信息:

①密码是六位数字,前面两位为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 . 解析
任意一个大于或等于4的偶数,都可以用两个素数之和表示,这就是哥德巴赫猜想。如:4=2+2,6=3+3,8=3+5, 10=5+5,12=5+7,98=19+79。

编写一个验证哥德巴赫猜想的VB程序:程序运行时,在文本框Text1中输入一个大于或等于4的偶数,单击“验证”按钮Command1后,如果哥德巴赫猜想验证成功,则在文本框Text2中显示“Yes”,并在列表框List1中显示用两个素数表示该偶数的等式,否则显示“No”。程序运行效果如图所示。

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

Function judge(x As Integer)As Boolean

 ‘函数judge的功能是判断整数x是不是素数,若是素数则返回True,否则返回False

 Dim j As Integer

 judge=True

 j=2

 Do While j<=x-1 And judge=True

If x Mod j=0 Then

judge=False

Else

j=j+1

End If

 Loop

End Function

Private Sub Command1_Click()

 Dim n As Integer, p As Integer, q As Integer, flag As Boolean

 n=Val(Text1.Text)

 p=1

 flag=False

 Do While  And p<n    ‘

 p=p+1

      ‘

If judge(p)And judge(q)Then

Text2.Text=“Yes”

flag=True

List1.AddItem Str(n)+“=”+Str(p)+“+”+Str(q)

  End If

 Loop

 If flag=False Then

Text2.Text=“No”

End Sub

火柴算术游戏,给定n(n<=24)根火柴,恰好用尽n根火柴拼凑出A+B=C形式的算式,问一共有多少种可行方案,请输出方案的总数,已知0~9每个数字所需的火柴根数如下表所示:

注意:⑴其中A+B=C 等式中的“+”“=”需要用去4根火柴。

⑵0+4=4与4+0=4算作一种方案。

例如n=18,符合条件的算式共有5个:0+4=4,0+11=11,1+10=11,2+2=4,2+7=9。

小明设计了一个程序,在Text1中输入火柴数量,单击“计算”按钮,在Label1中输出总的可行方案数,并在List1中输出所有可行的算式。

程序代码如下,加框处代码有误,请修改。

Dim s(0 To 9) As Integer

Private Sub Command1_Click()

 Dim n As Integer, a As Integer, b As Integer, count As Integer

  count=0

  n=Val(Text1.Text)

  For a=0 To 999 Step 1

    For b=a To 999 Step 1

       If   Then   '①

        List1.AddItem Str(a)+"+"+Str(b)+"="+Str(a+b)

        count=count+1

      End If

    Next b

  Next a

  Label2.Caption="共"+Str(count)+"种方案"

End Sub

Function gs(ByVal x As Integer) As Integer

  Dim tmp As Integer

  tmp=0

  If x=0 Then tmp=s(0)

  Do While x > 0

         '②

    x=x \ 10

  Loop

  gs=tmp

End Function

Private Sub Form_Load()

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

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

End Sub

有一个n行m列网格状临时停车场,如图a所示:在网格中随机分布若干个石头,网格中“□”表示空位,“●”表示石头。停放一辆车需要长为clen个空位、宽1个空位的空间,且车只能南北停放。编写程序,实现统计该车共有多少种停放方法。

程序实现过程:生成规模为n×m的网格,在网格边界添加一圈交通锥“▲”,并将“□” “●”、“▲”按行依次存入数组a中,在文本框Tex3中输入停放该车最小长度clen值,在文本框Text4中输出共有多少种停放方法。程序运行界面如图b所示,实现上述功能的VB代码如下:

Dim a(1 To 200) As String

Dim n as Integer, m As Integer

Private Sub Command1 Click ()

Dim i As Integer, j As Integer, k As Integer

Dim s As string

n= Val(Text1. Text)+2

m=Val(Text2 Text)+2

List1. Clear

For i=1 To n*m

    If i<=m0ri>m*(n-1) or  ①  Then   ‘在矩阵周围加上一圈边界

        a(i)=“▲”

    Else

        k= Int(Rnd 2)

        If k=1 Then a(i)=“□” Else a(i)=“●”

    End If

Next i

‘在列表框List1中显示网格,代码略

End sub

Private Sub Command2 Click ()

Dim i As Integer, j As Integer, c As Integer, x As Integer, y As Integer

Dim cnt As Integer, clen As Integer

Dim flag As boolean

clen= Val(Text3. Text)

y=1

Do While y <=m

    For x =1 To n

        If a((x-1)*m+ y)=“□” Then

            c=c+1

        Else

            If c ≥=clen Then

                cnt=

            End if

             ③

        End If

    Next x

    y=y+1

Loop

Text4 Text Str(cnt)

End Sub

请回答下列问题

  1. (1) 根据图a所示,车长需3个空位的汽车共有种不同的停法。
  2. (2) 请在划线处填入合适的代码。

     ② ③ 

下列问题适合使用枚举算法解决的是(  )
A . 计算已知半径圆的面积 B . 超市打折方案 C . 校园歌曲大赛的成绩排名 D . 计算10000以内的所有的素数
若一个三位数abc满足,abc=a3+b3+c3则称abc为水仙花数。如三位数153满足13+53+33=1+125+27=153,则153是水仙花数。以下是找出所有水仙花数的程序,请把程序补充完整。(a为百位数、b为十位数、c为个位数)

Dim i As Integer, a As Integer, b As Integer, c As Integer

For i=100 To

  a=i\100

  b=

  c=i-100*a-10*b

  If Then

    Print i

  End If

Next i

合数指自然数中除了能被1和本身整除外,还能被其他数(0除外)整除的数。与之相对的是质数,而1既不属于质数也不属于合数,最小的合数是4。编写合数“寻找质因子”的程序,程序功能:在文本框Text1中输入一个整型的合数,单击“计算”按钮Command1后,在文本框Text2中显示该整数可分解出的所有质因子。程序运行界面如图所示。

  1. (1) 观察程序界面,不具有Caption属性的对象的控件类名是
  2. (2) 实现上述功能的VB程序如下,请在画线处填入合适的代码。

    Private Sub Command1_Click( )

      Dim n, k As Integer

      Dims As String

         ①   

      k=2

      Do While n>1

          If n Mod k=0 Then

               ②   

            s=s+Str(k)

          Else

            k=k+1

          End If

      Loop

      Text2.Text=s

    End Sub

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

  3. (3) 运行上述程序,若在文本框Text1中输入1024,单击“计算”按钮后,文本框Text2中显示的内容为
求方程组的解。有如下方程组:

求该方程组解的Python程序如下:

for x in range(1,8,1):

    if      :

        print("x= ",x)

        print("y=",38-5*x)

回答下列问题:

  1. (1) 上述程序中,用到的主要算法是
  2. (2) 为了使程序能正确运行,上述程序划线处的代码应为
验证哥德巴赫猜想“任一大于2的整数都可写成两个质数之和"的Python程序如下:

import math

def isprime(n):     #判断素数(素数又称质数)

    if n= 1:

        return False

    elif n= 2:

        return True

    else:

        for i in range      ①     

           if n%i== 0:

          return False

      return True

print('请输入一个正整数n:')

n = int(input( ))

for i in range(2,n//2+1):

    if isprime(i) and      ②      

        print(n,‘=’,i,‘+’,n-i)

  1. (1) 请在划线处填入合适的代码,完善程序,实现功能。

     ② 

  2. (2) 若输入的一个正整数为6,则输出结果是 。
数学中的“自守数”:如果一个数的平方数的末几位等于该数本身,这个数就是自守数。例如:

5*5=25

6*6=36

25*25=625

76*76=5776

……

那么,5、6、25、76 等数被称为自守数。小袁编写一个 VB 程序,实现如下功能:找出 10000 以内所有可能的自守数,单击“统计”按钮 Command1,将符合要求的自守数显示在列表框 List1 中,统计个数显示在标签 Label1 中,运行界面如图所示。

  1. (1) 程序运行时要在按钮上显示“统计”,应设置该按钮的属性。
  2. (2) 为实现上述功能,请在划线处填入合适的代码。

    Private Sub Command1_Click()

        Dim n As Single, k As Integer, t As Integer, c As Integer

        List1.Clear c=0

        For n = 5 To 10000

            k = Len(Trim(n))               'Trim()函数用于删除字符串前后的空格

            t = (n * n) Mod     ①     

            If t = n Then

                List1.AddItem Str(n)

                  ② 

            End If

        Next n

        Label1.Caption = "自守个数为:" + Str(c)

    End Sub

    为实现上述功能,划线处应填入的代码分别为

  3. (3) 解决该问题采用了(选填:枚举/解析)算法。
现有36个人搬36块砖,男的搬4块,女的搬3块, 2个小孩抬一块。要求一次正好全搬完,问男、女、小孩各需多少人?如果用编程的方法求解,以下算法最合适的是(   )。
A . 解析法 B . 枚举法 C . 冒泡排序法 D . 选择排序法
小王编写了一个VB程序,该程序的功能是:15个数形成环状,现要分别找出3个相邻的数:使其相加之和最大或最小。如15个数依次为:18,14,42,61,13,19,14,13,28,52,61,58,30,则相邻三数之和最大为62(30+18+14),相邻三数之和最小为31(4+26+1)。

程序运行时,先随机生成15个[1,30]区间内的整数,存储在数组a(0)至a(14),并在文本框Text1中显示;单击“计算”按钮Command1,则在标签Labe14中显示连续三数最大和,在标签Label5中显示连续三数最小和,程序运行界面如图所示。

实现上述功能的VB程序如下,请在划线处填入合适的代码。

Const n=14

Dim a(n) As Integer

Private Sub Form_Load()

'随机生成15个数,存储在数组元素a(0)~a(14)中,并显示在文本框Text1中

End Sub

Private Sub Command1_Click()

    Dim i As Integer, j As Integer, k As Integer

    Dim imax As Integer, imin As Integer

    Dim smax As Integer, sum As Integer, smin As Integer

    smax=0:smin=100

    For i=0 To 14

        j=

        k=

        sum=a(i)+a(j)+a(k)

        If sum>smax Then

            smax=sum

            imax=i

        End If

        If sum<smin Then

            smin=sum

            imin=i

        End If

    Next i

    Label4.Caption=Str(smax)

    Label5.Caption=Str(smin)

End Sub

某密码强度判断程序功能如下:在文本框Text1中输入由大写字母、小写字母、数字和其他字符4种不同类型字符组成的密码字符串,单击“判断”按钮Cmd1,在标签框Label3中显示判断结果。程序运行界面如图所示。

密码强度判断条件如下:密码长度小于6,则强度为“弱”。在密码长度大于等于6的情况下,若只出现一种字符,则密码强度为“弱”;若出现两种不同字符,则密码强度为“中”,出现三种以上不同字符,则密码强度为“强”。

  1. (1) Cmd1对象属于类。(单选,填字母:A .Label/B .TextBox/C .CommandButton)
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Private Sub Cmd1_Click()

        Dim n As Integer, i As Integer, m As Integer, s As String, c As String

       

        If n<6 Then

            Label3.Caption="弱"

        Else

            s="0000"

            For i=1 To n

                c=Mid(Text1.Text, i, 1)

                If c>="0" And c<="9" Then

                    Mid(s, 4, 1)="1"            '将字符串s第4位上的字符替换为"1"

                ElseIf c>="A" And c<="Z" Then

                    Mid(s, 3, 1)="1"

                ElseIf c>="a" And c<="z" Then

                    

                Else

                    Mid(s, 1, 1)="1"

                End If

            Next i

            m=0

            For i=1 To 4

                If Mid(s, i, 1)="1" Then

            Next i

            If m<2 Then

                Label 3.Caption="弱"

            ElseIf m=2 Then

                Label 3.Caption="中"

            Else

               Label3.Caption="强"

            End If

        End If

    End Sub

  3. (3) 若文本框 Text1中输入的内容为“a26$gh2!”,则单击“判断”按钮Cmd1,事件过程运行结束时,变量s的值为
编写VB程序,实现如下功能:在文本框Text1中输入一个大于1000的正整数,单击按钮Command1后会去除其中3个数字,保证余下的数字在不改变顺序的情况下其数值最大,然后在文本框Text2中输出该数。

Private Sub Command1_Click()

    Dim s As string

    Dim n As Integer, w As Integer

    s=Text1.Text

    For i=1 To 3

        n=Len(s):w=1

        For j=2 To n

            If ________ Then w=j Else Exit For

        Next j

        s=Mid(s,1,w-1)+Mid(s, w+l, n-w)

    Next i

    Text2.Text=s

End Sub

画线处的正确代码为(    )

A . Val(Mid(s,w,1))<=Val(Mid(s,j,1)) B . Val(Mid(s,j,1))<=Val(Mid(s,j+1,1)) C . Val(Mid(s,w,1))>=Val(Mid(s,j,1)) D . Val(Mid(s,j,1))>=Val(Mid(s,j+1,1))
给定12个不同的正整数,任务是计算这些数里面有多少个数对满足:数对中一个数是另一个数的两倍。比如给定8 13 21 28 19 33 10 17 42 5 38 7,得到的答案是3,因为10是5的两倍,42是21的两倍,38是19的两倍。下列VB代码段能实现上述功能,请将划线处代码补充完整:

Private Sub Command2_Click()

    Const n=12

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

    Dim i As Integer, j As Integer

    Randomize

    For i=1 To n

        a(i)=Int(Rnd * 50)+1

        For j=1 To i- 1

            If a(i)=a(j) Then

        Next j

        If j <i Then

    Next i

    For i=1 To n

        For j=1 To n

            If  Then

                s=s+1

                List1. AddItem Str(s)+":"+ Str(a(i)) + Str(a(j))

                Exit For跳出内层循环

            End If

        Next j

    Next i

End Sub

哥德巴赫猜想:任意一个大于等于4的偶数,都可以用两个素数之和表示。如:4=2+2,6=3+3,8=3+5,10=5+5,12=5+7,98=17+79。

编写一个验证哥德巴赫猜想的VB程序:程序运行时,在文本框Text1中输入一个大于等于4的偶数,单击“验证”按钮Command1后,如果哥德巴赫猜想验证成功,则在文本框Text2中显示“Yes”,并在列表框List1中显示用两个素数表示该偶数的等式,否则显示“No”。程序运行结果如图所示。

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

′函数pp(x)的功能是判断整数x是否为素数,若是素数则返回True,否则返回False

Function pp(x As Integer) As Boolean

    Dim j As Integer

    pp = True

    j = 2

    Do While j <= Int(Sqr(x)) And pp=True

        If x Mod j = 0 Then pp = False Else

             '①

    Loop

End Function

Private Sub Command1_Click()

    Dim n As Integer, p As Integer, q As Integer, pd As Boolean

    n = Val(Text1.Text)

    p = 1              

    pd = False

    Do While Not pd And p < n

        p = p + 1

                    '②

        If pp(p) And pp(q) Then

            Text2.Text = “Yes”

            pd = True

            List1.AddItem Str(n) + “=” + Str(p) + “+” + Str(q)

        End If

    Loop

    If pd = False Then Text2.Text = “No”

End Sub

程序中加框①处应改正为

加框②处应改正为