相关试卷

  • 1、有如下VB程序段:

    k=1

    For i=2 To 5

      If a(i)<a(k)Then k=i

    Next i

    if k<>1 then

      t=a(1):a(1)=a(k):a(k)=t

    End If 若程序段运行后,数组元素a(1)~a(5)的值依次为“165,168,178,175,171”,则下列选项中可能是a(1)~a(5)的原始数据序列的是(  )

    A、175,178,168,165,171 B、178,168,175,165,171 C、165,178,168,175,171 D、165,168,178,175,171
  • 2、一组同学的英语成绩分别为24,27,16,15,24,18,按从大到小进行排序的过程如下,则采用的排序算法及第二遍的排序结果分别为(  )

    第一通

    27

    24

    16

    15

    24

    18

    第二遍

    第三遍

    27

    24

    24

    15

    16

    18

    A、冒泡排序,27 24 16 15 24 18 B、冒泡排序,27 24 18 16 15 24 C、选择排序,27 24 16 15 24 18 D、选择排序,27 24 18 16 15 24
  • 3、使用选择排序算法对数据7,1,5,8,4从小到大排序,需要进行数据交换的次数是(  )
    A、5 B、2 C、3 D、4
  • 4、某数据压缩方法描述如下:

    ①原始数据中,某数据不为0且相邻无重复,压缩数据用该数据表示;

    ②原始数据中,某数据为0且相邻无重复,压缩数据用两个数表示,第1个为0,第2个为0;

    ③原始数据中,某数据相邻且有重复,压缩数据用3个数表示:第1个为0,第2个为重复数的个数,第3个为该数本身。

    小明编写了一个压缩的VB程序,功能如下:窗体加载时,自动读取原始数据,依次存储在数组元素a(1),a(2),a(3)….中,原始数据的个数存储在变量n中,原始数据显示在文本框Text1中。单击“压缩”按钮Command1,程序对原始数据依次进行压缩处理,压缩数据显示在文本框Text2中。程序运行界面如图所示。

    (1)、数据“8 8 8 8 8 0 0 11 24”压缩后的结果为
    (2)、实现上述功能的VB程序如下,请在画线处填入合适的代码。

    Private Sub Command1_Click( )

      Dim s,result As String

      Dim i,num As Integer

      i= 1:result=""

      Do While i<=n

          s=a(i)

          num=1

          Do While s=a(i+1)

              i=i+1

                 ①   

          Loop

          If num >1 Then

            result=   ②   

            i=i+1

          End If

          s= a(i)

          num=1

          Do While s <> a(i+1)

              If s ="0"Then s ="00"

              result=result +s

              i=i+1

                 ③   

          Loop

      Loop

      Text2.Text=result

    End Sub

    以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②;③

  • 5、展开字符串,如果在输入的字符串中,含有类似于"c-g"或者“3-7"的字符串,就把它当作一种简写,字符串展开输出时有如下规则:

    ①如果“一”号右边的字符按照ASCII码的顺序大于左边字符,输出时,用连续递增的字母或数字串替代其中的“一”号,例如"c-g"输出为"cdefg","3-7"输出为"34567"

    ②如果“一”号右边的字符按照ASCII码的顺序小于或等于左边字符,输出时,保留中间的“一”号,例如"a-a"输出时为"a-a","4-1"输出为"4-1"

    ③如果“一”号右边的字符恰好是左边字符的后续字符,则删除中间的“一”号,例如:"d-e"就输出为"de","3-4"应输出为“3-4"。

    某同学按照上述算法,编写了VB程序,功能如下:在文本框Text1中输入简写字符串,单击“展开”按钮Command1后,程序进行字符串展开处理并显示在文本框Text2中。程序运行界面如图所示。

    (1)、如果输入的简写字符串为"abs—w—Y1234—5S—4Z",则展开后的字符串为
    (2)、实现上述功能的VB程序如下,请在画线处填入合适的代码。

    Private Sub Command1_Click( )

      Dim st1,st2 As String,i,n As Integer

      St1=Text1.Text

      n=Len(s1)

      st2=""

      For i=1 To n

        If pos(st1, i)<> "—" Then

          st2=st2+ pos(st1, i)

        Else

            If pos(st1, i) <pos(st1, 1) Then

              For j=Asc(pos(st1, i-1))+1To Asc(pos(st1, i+ 1))-1

                    ①   

              Next j

            Else

              st2 = st2+"—"

            End If

          End If

      Next i

      Text2. Text = s2

    End Sub

    Function pos(s As String, x As Integer) As String

           ②   

    End Function

    以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②

  • 6、RLE压缩方法是Windows系统中使用的一种图像文件压缩方法,用两个数据表示,第一个记录指定像素重复的次数,第二个记录具体的像素值。例如,有一表示颜色像素值的字符串RRRRGGBB,用RLE压缩方法压缩后可用4R2G3B表示。小芳设计了一个VB程序实现RLE算法功能。在Text1中输入原始数据,点击“压缩”按钮Command1后,在Text2中显示经过压缩后的数据,程序运行界面如图所示。

    (1)、这里采用的压缩技术属于(选填:有损压缩/无损压缩)。
    (2)、若想修改文本框Text2中的字体大小,需对它的属性值进行修改(选填:BackColor/Font/Text).
    (3)、实现上述功能的VB程序如下,请在画线处填入合适的代码。

    Private Sub Commandl_Click( )

      Dim s1 As String,s2 As String

      Dim c As Integer,p As Integer

      sl=Text1.Text:s2= ""

      c=1:p=2

      Do While p<Len(sl)

          If Mid(s1,p,1)=Mid(s1,p-1,1)Ther

              c=c+1

          Else

              s2 = s2+Str(c)+ Mid(s1,р-1,1)

                 ①   

          End If

      p=р+1

      Loop

      Text2.Text =   ②   

    End Sub

    以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②

  • 7、在数据加密过程中,为了防止加密方法外泄,往往使用密钥,只有掌握了密钥才能正确加密、解密。某信息加密VB程序,对输入的明文(由英文字母或数字组成的字符串)进行加密,输出加密后得到的密文。该程序使用的密钥是一个2位十进制数。数据加密方法对明文中的每个字符进行如下处理:

    ①将该字符的ASCII码加密钥后,转换成对应的8位二进制;

    ②将对应的8位二进制数进行按位取反(1变0,0变1);

    ③将最后产生的8位二进制数转换成对应的十六进制数;

    ④将得到的十六进制数码交换顺序后连接,即为该明文的密文。

    例如,明文大写字母“A",输入的密钥数值为25,得到的密文为5A,信息加密过程如图所示。

    小李编写了加密算法的VB程序,在文本框Text1中输入明文,单击“加密”按钮Command1。程序对明文数据依次进行加密处理,加密后生成的密文将显示在文本框Text2中。程序运行界面如图所示。

    (1)、如果输入的明文为大写字母“F",密钥为16,则生成的密文是
    (2)、实现上述功能的VB程序如下,请在画线处填入合适的代码。

    Function btoh(m As String)As String     ‘将4位二进制数转换成对应的十六进制数

      Dim s As Integer, i As Integer

      Dim st As String

      st="0123456789ABCDEF"

      s=0

      For i=1 To 4

          s=s*2 +Val(Mid(m,i,1))

      Next i

         ①   

    End Function

    Private Sub Command1_Click( )

      Dim ans,ch,s,ret,s1,s2 As String

      Dim a,b,c As Integer

      s= Text1.Text

      c= Val(Text2.Text)

      For i = 1 To Len(s)

          ch=Mid(s,i,1)   ‘取出第i个字符存入变量ch

          a=Asc(ch)

          b=a+c

          ret = " "

          For m=1 To 8             ‘完成加密步骤①和步骤②

              n=(b+1)Mod 2

              ret =str(n)+ ret

                 ②   

          Next m

          s1 = btoh(Mid(ret,1,4))    ‘完成加密步骤③和步骤④

          s2 = btoh(Mid(ret,5,4))

          ans=ans +s2+s1

      Next i

      Text3.Text=ans

    End Sub

    以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②

  • 8、某日期加密授权码的生成方法如下:

    ①授权码由9位字符组成,前8位为日期的密文,最后1位为验证码;

    ②取日期各位的字符,若该字符第一次出现,则直接取其对应的加密字符,否则取下一个不重复的加密字符;

    ③求出所有日期字符数值的和,将和除16取余加1得到一位验证码字符,取得的验证码重复时,处理规则与②相同。

    加密字符对应表如下:

    值(十进制)

    0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    加密字符

    K

    n

    G

    j

    L

    t

    W

    b

    O

    a

    P

    H

    Z

    Q

    Y

    C

    小李设计了一个生成8位日期(YYYYMMDD格式)授权码的VB程序,程序功能如下:在文本框Text1中输入一个8位有效日期,单击“生成”按钮Command1后,在标签Label2中显示该日期的授权码。运行界面如图所示。实现上述功能的VB程序如下。

    (1)、若输入的日期为"19970601",则其授权码是
    (2)、请在画线处填入合适的代码。

    Dim f(0 To 15)As Integer

    Const code ="KnGjLtWbOaPHZQYC"

    Private Sub Command1_Click( )

        Dim rq As String,sq As String

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

        rq = Textl.Text:sq=""

        For i= 1 To 8

            c=Val(Mid(rq,i,1))

            d=d+c

            sq=   ①   

        Next i

        yz =GetChar(d Mod 16+1)

        Text2.Text = sq + yz

    End Sub

    Function GetChar(x As Integer) As String

      Dim flag As Boolean

      flag = False

      Do While flag = False

          f(x) =f(x) +1

          If f(x) =1 Then

               ②   

            f(x) =f(x) +1

            flag=True

          Else

            x=(x+1) Mod 16

          End If

      Loop

    End Function

    以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②

  • 9、李雷收到了朋友发给他的一封奇怪的邮件,里面有段内容是由一些数字和符号组成的,信上说了这段内容是加密后的内容,并给出了具体的加密方法(假定原文的英文字母都是大写的),具体方法如下:

    ①“A”变为一个1到100内的随机数*27+1,“B”变成一个1到100以内的随机数*27+2,…,“Z”变为一个1到100以内的随机数*27+26;

    ②每个字母变为数字后会加一个“一”用来分割数字;

    ③其他空格和标点字符都按原来的表示。

    李雷用VB编写了一个解密程序,功能如下:将邮件中密文的内容复制到文本框Text1中,点击“解密”按钮Command1后,程序会解密密文并将解密后的内容显示在文本框Text2中,程序运行界面如图所示。

    (1)、根据描述,若密文为“1905-1442-”,则表示的是
    (2)、实现上述功能的VB程序如下,请在画线处填入合适的代码。

    Private Sub Command1_Click( )

      Dims As String, yw As String, t As String

      Dim Value As Integer

      s=Text1.Text

      Value=0

      yw=""

      For i=1 To Len(s)

        t=     ①   

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

            Value=Value *10+Val(t)

        Else If t="-" Then

            yw=yw+Chr(Asc("A")+Value Mod 27-1)

               ②   

        Else

            yw=yw+t

        End If

      Next i

      Text2. Text=yw

    End Sub

    以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②

  • 10、以下程序中,单击按钮“Command1”后,在Text1中随机生成了由数字0~9组成的20位随机数字。

    同时,在Text2中对该数字进行“加密”,加密规则为:对于每一位数字,加上5,结果保留个位。程序运行界面如图所示。

    (1)、若要将按钮上的文本修改为“转换”,则应修改Command1对象上的属性。
    (2)、实现以上功能的VB程序如下,请在画线处填入合适的代码。

    Private Sub Command1_Click( )

        Dim s1 As String, s2 As String, c As String

        Dimi As Integer, s As Integer

        For i=1 To 20

            s1=s1+   ①   

        Next i

        Text1. Text=s1

        For i=1 To 20

            c=Mid(s1, i, 1)

            s=    ②   

            s2=s2 & s

        Next i

        Text2. Text=s2

    End Sub

    以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②

    (3)、若此程序仅生成4位数字7894,其他规则不变,则输出的结果为
  • 11、小王编写了一个实现文字查找及替换功能的VB程序,运行界面如图所示。文本框Text1中显示原文内容,在Text2中输入查找内容,Text3中输入替换内容,单击“全部替换”按钮Commiand1后,Text4中显示替换的结果,Text5中显示替换次数,Text6中显示“查找内容”在原文中的起始位置。

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

    Private Sub Command1_Click( )

      Dim s As String,result As String,pos As String

      Dim count As Integer,i As Integer

      i=1:count=0

      result="":pos=""

      Do While i<=Len(Text1.Text)

        s=Mid(Text1.Text,i,Len(Text2.Text))

        If s=Text2.Text Then

          result=result+Text3.Text

          count=count+1

          pos=     ‘①

          i=i+Len(Text2.Text)

        Else

                 ‘②

          i=i+1

        End If

      Loop

      Text4.Text=result

      Text5.Text=Str(count)

      Text6.Text=pos

    End Sub

    以上程序段运行时,为了实现上述功能,加框处代码应改正为:①;②

  • 12、在平面直角坐标系中,给定一组有序的点。从原点出发,依次用线段连接这些点,构成一条折线。要求编写一个“计算折线长度”的程序,功能如下:在文本框Text1中依次输入这些点的坐标值(数据都用逗号分隔并以逗号结尾),单击“计算”按钮Cmd后,程序计算这条折线的长度,结果显示在Label1中。例如,三个点的坐标(5,10)、(8,12)、(6,17)输入格式如图所示。

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

    Private Sub Cmd_Click( )

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

    Dim x1 As Single, y1 As Single, x2 As Single, y2 As Single

    Dim d As Single, Totald As Single, v As Single, s As String

    s=    ①    

    x1=0:y1=0             ‘出发点为坐标原点

    k=1:i=1:Totald=0

    For i=1 To Len(s)

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

          v=Val(Mid(s,j,i-j))       ‘提取坐标值,保存在变量v中

          j=i+1

          If    ②      Then

              x2=v

          Else

              y2=v

              d=Sqr((x2-x1)-2+(y2-y1)-2)

              Totald=Totald +d

              x1=x2:y1=y2

          End If

          k=k+1

      End If

    Next i

    Label1.Caption=Str(Totald)

    End Sub
     

    (3)、运行该程序,输入数据如图所示,程序执行到循环结束时,变量k的值为
  • 13、下列VB程序段的功能为;根据文本框Text1中各字符的大小关系,计算各字符按升序排列的序号,并将序号保存在数组y中。如文本框内容为“2011”,程序运行后y(1)~y(4)各元素的值分别为“4,1,2,3”。

    s=Text1.Text

    n=Len(s)

    For i=1 To n

        y(i)=1

    Next i

    For i=1 To

        For j=  To n

          If  Then

              y(j)=y(j)+1

          Else

              y(i)=y(i)+1

          End If

        Next j

    Next i

    上述程序段3个方框处的表达式分别为(  )

    A、⑴n         ⑵1         ⑶Mid(s,j,1)>=Mid(s,i,1) B、⑴n         ⑵1         ⑶Mid(s,j,1)>Mid(s,i,1) C、⑴n-1       ⑵i+1       ⑶Mid(s,j,1)>=Mid(s,i,1) D、⑴n-1       ⑵i+1       ⑶Mid(s,j,1)>Mid(s,i,1)
  • 14、有如下VB程序段:

    Private Sub Command1_Click( )

      Dims As String, i As Integer

      s=Text1.Text

      For i=1 To 8 Step 2

          s=ds(s, i)

      Next i

      Text2.Text=s

    End Sub

    Function ds(s As String, m As Integer)As String

      Dim n As Integer

      n=Len(s)

      If m<1 0r m>n Then ds= "位置有误"

      If m=1 Then ds=Mid(s, 2, n-1)

      If m=n Then ds=Mid(s, 1, n-1)

      If m <n Then ds=Mid(s, 1, m-1)+Mid(s, m+1, n-m)

    End Function

    若在文本框Text1中输入“TXHOLLYCLASS”,执行该程序段后,文本框Text2中显示的是(  )

    A、THLYLS B、XHLLCLSS C、TXHOLLY D、XOLCLASS
  • 15、有如下VB程序段:

    s="123456789"

    g=""

    For i=1 To 3

        n=Len(s)

        x=Int(Rnd*n)+1

        g=g+Mid(s, x, 1)

        s=Mid(s, 1, x-1)+Mid(s, x+1, n-x)

    Next i

    在程序执行时,若变量x的值依次为3,3,6,则最终变量区的值为(  )

    A、"336" B、"346" C、"348" D、"15"
  • 16、给定m个区间和1个数组(有n个元素),现要求根据各区间限定的取值范围,将该数组依次分割成m+1个段,具体分割方法如下:

    ·第1段是从数组首个元素开始,元素值都属于第1区间的最长连续元素段。如果首个元素不属于第1区间,则第1段元素个数为0。

    ·第1段分割后的剩余元素,用同样的方法来依次分割第2段,第3段…,第m段。

    ·第m段分割后的剩余元素分割到第m+1段(剩余段)。

    若第p(1≤p≤m-1)段末尾连续元素的值也同时属于第p+1区间,则这块连续元素称为第P段“重叠块”,该段其余部分称为第p段“非重叠块”。由于不存在第m+1区间,这里特别规定:第m段的全部元素都分制到第m段“非重叠块”,第m段“重叠块”的元素个数为0。一个数组分段示例如图所示。图中数组第1个元素10不属于第1区间[0,5],因此第1段的元素个数为0。10和20属于第2区间,而33不属于第2区间,因此第2段只包含10和20两个元素。第3段末尾连续三个元素的值也同时属于第4区间,因此,第3段“非重叠块”包含38,58,46,第3段“重叠块”包含5,62,69。

    (1)、给定2个区间依次为[10,50]、[30,80],数组各元素为“12,44,34,45,66,50,45,70”,则第1段“重叠块”中的元素个数为个。
    (2)、小李根据上述描述,设计了一个统计各段“非重叠块”“重叠块”和剩余段中元素个数的算法。算法的VB程序如下,请在画线处填入合适的代码。

    Const n=18,m=6

    Dim a(1 To n)As Integer

    Dim b(1 To 2*m)As Integer

    b(1)、b(2)为第1区间的下限和上限,b(3)、b(4)为第2区间的下限和上限……

    Dim c(1 To 2*m+1)As Integer

    ‘c(1)、c(2)分别存储第1段“非重叠块”和“重叠块”的元素个数;

    ‘c(3)、c(4)分别存储第2段“非重叠块”和“重叠块”的元素个数……

    ‘c(2*m-1)存储第m段“非重叠块”的元素个数,c(2m)存储第m段“重叠块”的元素个数(值为0);      ‘c(2*m+1)存储剩余段的元素个数

    Private Sub Command1_Click( )

      Dim i As Integer,p As Integer,i As Integer,LL As Integer

    ‘读取n个数据并保存在数组a中,代码略

    ‘读取m个区间的下限和上限并保存在数组b中,代码略

      For i=1 To 2*m+1

        c(i)=0

      Next i

      i=1:p=1

      L=0:LL=0

    Do While   ①   

      If IsIn(i, p)Then

          If IsIn(i, p+1)Then

              LL=LL+1

          Else

                 ②   

              LL=0

          End If

          i=i+1

        Else

          c(2*p-1)=L

          c(2*p)=LL

            L=0:LL=0

            p=p+1

        End If

      Loop

      If i<=n Then

        c(2*p-1)=n-i+1

      Else

        c(2*p-1)=L

        c(2*p)=LL

      End If

    ‘输出统计结果,代码略

    End Sub

    ‘函数IsIn用来判断a(i)值是否属于第p区间

    Function IsIn(i As Integer, p As Integer)As Boolean

    If p>m Then

        IsIn=False

    Else

        If   ③   Then IsIn=True Else IsIn =False

    End If

    End Function

    以上程序段运行时,为了实现上述功能,画线处应填入的代码为:①;②;③

  • 17、 6174是一个数学黑洞数。一个任意的四位正整数(四位数字完全相同除外),将数字重新组合成一个最大的数和最小的数并相减,重复这个过程,最多七步,必得6174。如取四位数4562,按以上方法做如下运算:①6542-2456=4086;②8640-0468=8172;③8721-1278=7443;④7443-3447=3996;⑤9963-3699=6264;⑥6642-2466=4176;⑦7641-1467=6174。

    程序运行界面如图所示。

    在文本框Text1中任意输入一个不完全相同的四位正整数,在文本框Text2中输出掉进黑洞的步数。实现上述功能的VB代码如下,但加框处代码有误,请改正。

    Private Sub Command1_Click( )

      Dim a(1 To 4)As Integer

      Dim x As Integer,y As Integer,c As Integer,t As Integer

      x=Val(Text1.Text)

      c=0

      Do While x<>6174

          For i=1 To 4

              a(i)=x Mod 10

                        ‘①

          Next i

          For i=1 To 3

              For j=i+1 To 4

                If  Then      ‘②

                    t=a(i):a(i)=a(j):a(j)=t

                End If

            Next j

          Next i

          x=a(1)*1000+a(2)*100+a(3)*10+a(4)

          y=a(1)+a(2)*10+a(3)*100+a(4)*1000

          x=x-y

          c=c+1

        Loop

        Text2.Text=Str(c)

    End Sub

    以上程序段运行时,为了实现上述功能,加框处代码应改正为:①;②

  • 18、尼克斯彻定理:任何一个大于等于1的整数的立方等于一串连续奇数之和,如:13=1,23=3+5,33=7+9+11。编写一个VB程序验证该定理,程序运行时,在文本框Text1中输入一个大于等于1的整数,单击“验证”按钮Command1后,在文本框Text2中显示验证结果,运行界面如图所示。

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

    Private Sub Command1_Click( )

      Dim a,b,n,t,sum As Integer

      Dim flag As Boolean,s As String

      n=Val(Text1.Text)

      For i=1 To n-3 Step 2

        sum=0:t=i:a=t:flag=False

        Do While sum<n^3 And flag=False

            sum=sum+t

            b=t

                                ‘⑴

            If sum=n^3 Then flag=True

        Loop

        If flag=True Then Exit For

      Next i

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

      For  To b Step 2           ‘⑵

        s=s+"+"+Str(i)

      Next i

      Text2.Text=s

    End Sub

    以上程序段运行时,为了实现上述功能,加框处代码应改正为:⑴;⑵

  • 19、用VB编写一个计算 的程序,程序代码如下,请补充完整。

    Private Sub Command1_Click( )

      Dim i, n, tAs Integer

      Dim m, s As Double

      s=1:t=1

      n=Val(Text1.Text)

      For i=2 To n

          m=1

          For j=1 To   ①   

              m=   ②       ‘计算1/(2*i-1)!

          Next j

          s=s+m*t     ‘累加通项式

            t=-t

      Next i

      Text2.Text=Str(s)   ‘结果显示到文本框Text2中

    End Sub

    以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②

  • 20、小发报名参加“智力大冲浪”节目。比赛规则如下:比赛开始时,参赛者将预先得到M元奖金。比赛时间分为N(N≤100)个时段,有N个小游戏,每个时段完成1个,第i个小游戏必须在规定时段t(i)

    (1≤t(i)≤N)内完成,可以提前完成,但不能晚于该时段完成,否则要从奖金M元中扣去一部分奖金w(i),w(i)为自然数,不同的游戏扣去的奖金是不一样的。每个游戏必须从整时段开始。请间小炫如何安排自己做游戏的顺序,才能赢取最多的奖金?将结果输出到文本框Text1中。注意;比赛绝对不会让参赛者赔钱。例如:当N=5,M=100时,

    游戏编号

    1

    2

    3

    4

    5

    完成期限t(i)

    1

    4

    2

    3

    2

    扣除奖金数w(i)

    5

    4

    10

    8

    7

    最优方案为:

    完成时段

    5

    4

    2

    3

    1

    其中第一个游戏无法在期限内完成,扣除5元,最后赢取100-5=95元。

    章法思想:让扣款高的游戏尽量准时完成,扣除的奖金越少,则最后赢取的奖金越多。

    ⑴按扣款数值从大到小排序,顺序为3,4,5,1,2。

    ⑵对于游戏,在时间段1到t(i)内完成的效果都是一样的,所以尽量在时间段t(i)内完成,若该时段

      已经被占用,则依次考察时间段t(i)-1,t(i)-2…,1。

      ①考虑游戏3,放置在时间段2完成(注:t(3)=2);

      ②考虑游戏4,放置在时间段3完成(注:t(4)=3);

      ③考虑游戏5,时间段2已经被游戏3占用,放置在时间段1完成(注:t(5)-1=1);

      ④考游游戏1,时间段1已经被游戏5占用,不能按时完成,放到时间段5;

      ⑤考虑游戏2,放置在时间段4完成(注:t(2)=4)。

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

      Dim N As Integer,M As Integer

      Dim t(1 To 100)As Integer    ‘变量t(i)表示第i个游戏的完成期限

      Dim w(1 To 100)As Integer    ‘变量w(i)表示未完成第i个游戏要扣除的奖金

      Dim f(1 To 100)As Boolean    ‘变量f(i)表示第i个时段是否已经被占用

      Private Sub Form_Load( )

      ‘生成时段数量N和初始奖金数M

      ‘生成t数组和w数组

    End Sub

    Sub swap(x As Integer,y As Integer)    ‘自定义过程,可以用Call语句来调用该过程

      Dim z As Integer

      z=x:x=y:y=z

    End Sub

    Sub sort( )          ‘自定义过程,可以用Call语句来调用该过程

      Dim x As Integer, I As Integer, j As Integer

      For i=1 To N-1

        For j=i+1 To N

          If w(i)<w(j)Then

              Call swap(w(i),w(j))    ‘调用自定义过程

                   ①   

          End If

        Next j

      Next i

    End Sub

    Private Sub Command1_Click( )

      Dim i As Integer,k As Integer,p As Integer

      Call sort         ‘调用自定义过程

      tot=0

      For i=1 To n

          f(i)=True

      Next i

      For i=1 To N        ‘对每个游戏从该游戏的规定期限开始往左找时间段,找到则完成该游戏

          p=-1

          k=t(i)

          Do While k>0 And p=-1

                  If f(k)=True Then

                  p=k

                Else

                   ②   

                End If

          Loop

          If p=-1Then tot=tot+w(i)

      Next i

         ③   

      Text1.Text=Str(ans)

    End Sub

    以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②;③

上一页 1067 1068 1069 1070 1071 下一页 跳转