1. 小林发现他的鱼缸里的观赏鱼越来越少了。仔细观察才发现,即使按时喂鱼,一些大鱼也会争着吃小鱼——但是不会吃比它小太多的鱼。准确地讲,若一条大小是ai的鱼,当存在另外一条鱼aj个头严格比它小,但个头差不超过整数k时(即ai−aj≤k),ai会吃掉aj——吃掉后,ai不会变大,aj会消失。

如:当鱼的大小是a=[101,53,42,102,101,55,54]且k=1时,一种可能的掠食过程是(下划线表示被吃):[101,53,42,102,101,55,54]→[101,53,42,102,55,54]→[101,42,102,55,54]→[42,102,55,54]→[42,102,55],最后只剩下3条鱼。小林想用Python程序模拟研究一下,对于给定的鱼大小和k的值,最坏情况下会剩几条鱼。

(1) 若a=[20, 15, 10, 15, 31, 20, 25], k=5,则最坏情况下会剩条鱼。
(2) 研究前,小林先对a中所有数据进行升序排序,请完成下面的程序。

a = [101, 53, 42, 102, 101, 55, 54]

k = int(input())   # k的含义如题所述

last = len(a) - 1

flag = True

while last > 0 and flag:

    flag = False

    for j in range( ):

        if a[j] > a[j+1]:

            a[j], a[j+1] = a[j+1], a[j]

            last = j

            flag = True

(3) 以下程序从最小的鱼儿开始模拟让较大的鱼吃较小的鱼,无法吃掉的鱼保存在st变量中,结束后输出st中剩余的元素个数就是最坏情况下所剩鱼的数量。请完善算法。

n = len(a)

st = [None] * n

top = -1

for i in range(n):

    while top >= 0 and st[top] < a[i] and a[i] - st[top] <= k:

        top -= 1

    top += 1

   

print("最坏情况下会剩下%d 条鱼" % (top+1))

(4) 对于剩下的鱼中,是否还存在某种大小的鱼儿。输入鱼的大小,查询该尺寸的鱼儿是否还存在。请完善以下算法。

size = int(input())      #输入要查询的鱼的尺寸

i = 0

j = top

while i <= j:

    m = (i+j) // 2

    if    # 若size值与第m号元素相等,则结束循环,此处关系表达式略

        break

    elif  :

        i = m + 1

    else:

        j = m - 1

if  :

    print("大小为%d 的鱼还在!" % size)

else:

    print("大小为%d 的鱼不存在,可能已经被吃了" % size)

【考点】
排序算法及程序实现; 分支结构语句及程序实现; 循环结构语句及程序实现;
【答案】

您现在未登录,无法查看试题答案与解析。 登录
综合题 困难
能力提升
换一批
1. 小杜对某班技术成绩情况进行分析,先排序再分析,排序后女生在前,男生在后(该班级男女生都有,其中0表示女,1表示男) ,且男女生均按成绩降序排序,最后比对男生女生平均分情况。数组a中存储了n位学生的性别和成绩数据,其中奇数位置存储性别信息,偶数位置存储成绩信息。

编写VB程序实现上述功能,运行程序在列表框List1中显示排序前学生数据。单击“统计”按钮,在列表框List2中显示排序后的结果,并且在Label1中显示男生女生平均分比对结果。程序运行界面如15题图所示。

(1) 由程序代码可知,共需类对象。(填数字)
(2) 实现上述功能的部分VB程序如下,请在划线处填入合适的代码。

Dim a(1 To 100) As Integer

Const n = 50    ‘共50位同学

Private Sub Comand1 Click)

    Dim sum As Integer, sum As Integer, m As Integer

    summ=0:sumw=0:m=0

    For i=

          k=i

          For j=i+1 To n

            If  or a(k*2-1)=a(2*j-1) And a(j*2)>a(k*2) Then k=j

          Next j

          If k<>i Then

              t1=a(i *2- 1): a(i *2- 1)=a(k*2- 1): a(k*2-1)=t

             t2 = a(i * 2): a(i*2)=a(k*2):a(k*2)=t2

         End If

         summ = summ + a(2*i-1)*a(2*i)

        sumw = sumw +

        m=

    Next i

    List2. AddItem “性别”“+”“成绩"

    For i=1 To n

         List2. AddItem Str(a(i *2- 1)) +“”+ Str(a(i * 2))

    Next i

    If summ/m>sumw/(n-m)Then

        Label1. Caption = "男生平均分高”

    Elself summ/m<sumw/(n-m)Then

         Label1. Caption =“女生平均分高”

    Else

         Label1. Caption =“男生女生平均分相同”

    End If

End Sub

Private Sub Form Load()

‘从数据库中读取数据,存在数组a中,数组元素a(1)和a(2)分别存储第一个学生的性别和成绩:数组元素a(3)和a(4)分别存储第二个学生的性别和成绩:以次类推存储其他学生的相关数据:将原始数据显示在List1中,代码略。

End Sub

(3) 程序中加框处代码有错,请改正。
综合题 困难