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

如果两个质数的差为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

  ②  

三个正整数a、b、c满足等式a2+b2=c2 , a、b、c称为“勾股数”,求出100以内所有“勾股数”可采用的算法是        (   )
A . 枚举算法 B . 解析算法 C . 冒泡排序 D . 顺序查找
对称字符串的特征是从左到右读和从右到左读是完全一样的。如“abba”是对称的,“abcba”也是对称的。判断字符串是否对称的VB程序段如下,请完善以下两处代码

s=Text1.Text

n=Len(s)          's是待判断的字符串

k=0:j=n

For i=1 to n/2

c1=Mid(s,i,1)

 c2=Mid(s,j,1)

If c1 <> c2 Then k = k+1: Exit For

j=

Next i

If    Then Label1.Caption="对称"  Else  Label1.Caption="不对称"

小王编写VB程序,实现如下功能:在Text1中输入1~9之间的任意一个数字,单击“计算”按钮Command1, 计算该数字的阶乘并显示在标签Label2中。程序运行界面如图所示:

  1. (1) 如图所示,窗体中(不包含窗体本身)的对象共有个(填数字)。
  2. (2) 实现上述功能的VB程序如下,请在划线处填写合适的代码。

    Private Sub Command1_Click()

    Dim i As Integer, j As Integer, s As Long

    s = 1

    i =

    If i >= 1 And i <= 9 Then

    For j = 1 To i

    s =

    Next j

    Label2.Caption = Str(i) & "的阶乘为:" & Str(s)

    Else

    Label2.Caption = "请重新输入1~ 9之间的任意数字"

    End If

    End Sub

  3. (3) 程序中,若将变量s的类型由Long改为Integer,在文本框Text1中输入的内容为“9”,单击“计算”按钮后,程序运行将会出现什么情况(单选,填字母:A .溢出 / B .类型不匹配 / C .要求对象)。
【加试题】某密码的破译步骤如下:

⑴找出文章(以“.”结束)中所有用英文表示的数字(均为小写,数字范围1≤n≤20),单词与数字对应如下:

⑵将这些数字平方后除以100取余,得到两位数如00,04,21,96。

⑶把这些两位数按升序排成一行,组成一个最小的新数,如果新数开头为0,就去除。

⑷步骤(3)找出的最小数即为密码。

小明按照上述方法,设计了一个解密的VB程序,功能如下:单击“解密”按钮Command1,程序依次将文本框Text1中以空格分隔的每个英文单词取出,若单词属于数字单词,则按解密步骤进行处理,最后在文本框Text2中输出解密结果。

程序运行效果如图所示,请回答下列问题:

  1. (1) 若文章内容为“tom bought two apples and five oranges, which cost ten dollars altogether.”,则破译后的密码应为
  2. (2) 请在划线处填入合适的代码。

    Dim a(1 To 20) As String

    Private Sub Form_Load()

        a(1) = "one": a(2) = "two" 

        ‘……将所有数字单词按顺序存入数组a中,代码略

    End Sub

    Private Sub Command1_Click()

        Dim s As String, tmp As String

        Dim c as Integer, i As Integer, j As Integer, k As Integer, t As String, ch As As String, code As Long

        Dim b(1 To 100) As String   ‘b数组存放数字单词处理后得到的两位数

        s = Text1.Text

        c = 0: i = 1: flag = True:t = ""

        Do While i <= Len(s)

            ch = Mid(s, i, 1)

            If ch >= "a" And ch <= "z" Then

                t = t + ch

                flag = False

            ElseIf flag = False Then

                For j = 1 To 20

                    If t = a(j) Then

                        c = c + 1

                        b(c) =

                    End If

                Next j

                t = ""

                flag = True

            End If

            i = i + 1

        Loop

        ’将b数组中的两位数按数值大小进行升序排序,代码略

        For i = 1 To c

            t = Val(b(i))

       

        Next i

        Text2.Text = Str(code)

    End Sub

    Function decode(num As Integer) As String

      Dim mo As Integer

      mo = num * num Mod 100

      If mo = 0 Then

        decode = "00"

      ElseIf    Then

        decode = "0" + Trim(Str(mo))

      Else

        decode = Trim(Str(mo))  'Trim为去除字符串两端空格的函数

      End If

    End Function

设有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

将一个十进制正整数转化为二进制数可以采用“除二取余法”,主要方法就是将十进制数用2除,保存所得余数,然后将商的整数部分作为下次运算的被除数,重复上述“除二取余”操作,直到商的整数部分为零时停止。

程序界面如图所示,在文本框Text1中输入一个正整数,单击“转换”按钮(Command1)后,对应的二进制数在文本框Text2中显示出来。

解决此问题的Visual Basic程序如下,在程序①和②划线处,填入适当的语句或表达式,把程序补充完整。

Private Sub Command1_Click()

 Dim x As Integer,s As String,r As Integer,t As Integer

x=Val(Text1.text)

s=“”

Do While ①      

 r=x Mod 2

s=Str(r)+s

x=②   

 Loop

 Text2.text=s

End Sub

  1. (1) 解决此问题所用的算法是。(选填:解析算法或枚举算法)
  2. (2) 程序中划线处①应填入
  3. (3) 程序中划线处②应填入
以下不适合使用解析算法求解的问题是(  )。
A . 已知三角形的底边和高,求三角形的面积 B . 已知两个整数a和b,求它们的最大公约数 C . 已知两个电阻的阻值,求它们并联后的总阻值 D . 已知两点坐标,求两点之间的距离
玫瑰花数是一个四位正整数,该数每一位上的数字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) 解决该问题主要采用的算法是
水仙花数是三维整数:其各位数字立方和等于该数本身,如153=13+53+33,如果要求出所有的水仙花数,下列算法最合适的是(   )
A . 查找法 B . 解析法 C . 排序法 D . 穷举法
在日常生活中,我们常常会碰到许多可以用算法解决的问题,以下描述中适合用解析法来解决的有(     )。

① 已知5个电阻阻值,求它们并联后的阻值

② 求某个同学期中考试各科成绩总分

③ 求某个班级期中考试某门科目的最高成绩

④ 根据三个系数a、b、c的值,求一元二次方程ax2+bx+c=0的解

A . ①②③ B . ②③④ C . ①②④ D . ①②③④
法就是在分析具体问题的基础上,抽取出一个数学模型,这个数学模型能用若干个解析式表示出来,解决了这些表达式,问题也就得以解决。
现有36个人搬36块砖,男的搬4块,女的搬3块, 2个小孩抬一块。要求一次正好全搬完,问男、女、小孩各需多少人?如果用编程的方法求解,以下算法最合适的是(   )。
A . 解析法 B . 枚举法 C . 冒泡排序法 D . 选择排序法
火柴棒等式。用火柴棒可以摆出0-9的数字,摆放规则如下图所示:

有一种火柴棒游戏,将火柴棒摆成形如“A+B=C”的火柴棒等式。用n根火柴棒摆放数学等式的规则约定如下:

⑴A、B都是不大于1000的正整数,若数值非零,则最高位不能是0;

⑵摆放“+”与“=”各使用两根火柴棒;

⑶A+B=C 与B+A=C视为相同的等式;

⑷n根火柴棒必须全部用上。

小明依据上述规则使用VB编写程序,研究“使用n根火柴棒,可以摆放出哪些不同的等式”,代码如下所示。请回答下列问题。

Dim sz(0 To 9) As Integer     ‘数组元素sz(i)用于存储数字i所使用的火柴棒的数量

Private Sub Form_Load()

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

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

End Sub

‘自定义函数hcs用于求解摆放数字x需要使用的火柴棒数量

Function hcs(ByVal x As Integer) As Integer

    Dim s As Integer, k as integer

    s = 0

    Do While     ①    

        k = x Mod 10

        s=s+sz(k)

        x = x \ 10

    Loop

    hcs = s + sz(x)

End Function

Private Sub Command1_Click()

    Dim n As Integer

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

    n = Val(Text1.Text)

    ans = 0

    List1.Clear

    For a = 0 To 999

        For b =    ②     To 999

            c = a + b

            If     ③    Then

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

                ans = ans + 1

            End If

        Next b

    Next a

    List1.AddItem ("共有" + Str(ans) + "种等式")

End Sub

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

     ② ③ 

  2. (2) 某次运行程序时,显示的等式中包含“7+17=24”,根据程序分析,输入的n的值为:
水仙花数也被称为超完全数字不变数,是指一个3位数,它的每个位上的数字的3次幂之和等于它本身(例如:13+53+33=153)。课堂上老师布置作业要求用VB编写一个程序,找出所有的水仙花数,下面是小丽同学完成的作业,其中有几处错误,请帮她修改。

Private Sub Command1_Click()

    Dim i As Long, j As Long, k As long

    Dim As long

    For i=0 To 9

        For j=0 To 9

            For k=0 To 9

                s=i*100+j*10+k

                If(i^3)+(j^3)+(k^3)=s Then

                    Debug. Print s

                End If

            Next k

        Next j

    Next i

End Sub

  1. (1) 修改“Dim As Long”行中的错误;
  2. (2) 修改“For i=0 To 9”行中的错误;
  3. (3) 修改“If(i^3)+(j^3)+(k^3)= s Then”行中的错误;
用枚举法在两个□内填入相同的数字使“□3×6528=3□×8256”表达式成立。

for i in range(1):

    if     :

print(i,“3×6528=3”,i,“×8256”,sep=“”)

下列选择正确的是(   )。

A . (i*10+3)*6528==(30+i)*8256 B . (i*3)*6528==(30+i)*8256 C . (i*10+3)*6528==(30*i)*8256 D . (i*3)*6528==(3*i)*8256)
已知海伦公式,其中,a、b、c分别为三角形的三条边长。利用海伦公式求三角形面积的算法属于(     )
A . 穷举法 B . 排序法 C . 解析法 D . 查找法
, 其中n为正整数,计算s值的VB程序段如下:

s=1:i=1:t=1

Do While i<2*n-1

   

Loop

方框中的代码由以下三部分组成:

①s=s+t

②i=i+2

③t= -t/(i*(i- 1))

下列选项中,代码顺序正确的是(    )

A . ③①② B . ①②③ C . ②①③ D . ②③①
星期天小明来到动物园游玩,园内共有n 个景点,每个景点序号为0,1,2,3……至n-1。现在只知道每个景点有一条路连接下一个景点。小明想寻找能游玩景点个数最多的一种方案并且从其中一个景点出发,最后能够回到出发景点。如果游玩的景点个数一样,则优先考虑景点序号小的。

例如,共有n=5 个景点,每个景点连接的下个景点分别是1,3,4,4,1

景点号

0

1

2

3

4

下一个景点号

1

3

4

4

1

方案一:从0号景点出发,则游玩线路为:0号→1号→3号→4号→1号,由于此方案无法回到出发点,则不考虑;

方案二:从1号景点出发,则游玩线路为:1号→3号→4号→1号,然后回到1号景点。最多可以玩3个景点。

现用Python程序模拟这个问题:

先输入景点总数:n ;则对应的景点为[0,1,2,3,4]

然后随机产生各景点所连接的下一个景点的序号,如:[1,3,4,4,1];

接着产生一个列表,如上表的信息则产生的列表s为:[[0,1],[1,3],[2,4],[3,4],[4,1]],

最后利用链表的方式来分析解决问题。

程序如下:

import random

#产生信息列表s

n=int(input("景点总数 "))

tt=[ ]; s=[ ]; c=0

while c < n :

  t=random.randint(0,n-1)

  if t !=c :

    s.append([   ①   ])

    c+=1

print(s)

#枚举所有方案,寻找正确方案。

max=0

for head in range(n):

  p=head

  k=1

  while k<=n and s[p][1]!=head:

    k+=1

    p=s[p][1]

  if  :

    max = k

    maxp = head

print("小明最多能访问 %d 个景点"%(max))

#输出正确线路

p=maxp

while s[p][1]!=maxp:

  print(s[p][0],end="→")

  p=s[p][1]

print(   ②    )

  1. (1) 横线处填写合适代码

     ② 

  2. (2) 方框处修改代码
假定母鸡每只4元,公鸡每只3元,小鸡每只0.25元,每种鸡都要买,现有100元,要买100只鸡,问有多少种方案。要求解这个问题,最适合的算法是(    )。
A . 枚举算法 B . 排序算法 C . 迭代算法 D . 冒泡算法
最近更新