VB_Python代码对照算法百题(012)

VB_Python代码对照算法百题(012)

VB代码: (2017年4月浙江)17.小王编写了一个依据成绩计算名次的VB程序,成绩为0到100之间的整数。算法的基本思想:先统计每个分数的个数,然后按照分数从高到低依次计算每个有效分数(该分数的个数不为0)对应的名次,分数相同时名次并列。最高分为第1名,该分数的名次与个数之和为下一个有效分数的名次,以此类推。程序用数组A存放每个分数对应的个数,数组B存放每个分数对应的名次。例如,下表中最高分100有2个,并列第1名,则分数96的名次为分数100的名次加上分数100的个数,即第3名。 VB_Python代码对照算法百题(012) 程序运行时,学生数据显示在列表框List1中,单击“计算”按钮Command1,计算结果显示在列表框List2中,程序运行界面如图所示。 VB_Python代码对照算法百题(012) 

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

(1)如表所示,若分数93的个数为2,则该分数对应的名次为

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

Dim sName(1 To 50) As String ‘存放学生姓名

Dim sScore(1 To 50) As Integer ‘存放学生分数

Dim recCount As Integer ‘存放学生人数

Private Sub FormLoad() 

    ‘本过程从数据库中读取学生数据,存储在相应的变量中,并在List1中显示 

    ‘代码略 

recCount = 8 

List1.AddItem “姓名 分数” 

List1.AddItem “—————” 

For i = 1 To recCount 

    List1.AddItem sName(i) + ” ” + Str(sScore(i)) 

Next i 

End Sub 

‘整数转换成长度固定的字符串 

Function ads(x As Integer, n As Integer) As String 

Dim sx As String, nx As Integer, i As Integer 

sx = Str(x)

nx = Len(sx) 

For i = 1 To n – nx 

    sx = ” ” + sx 

Next i  

         (1) 

End Function 

Private Sub Command1Click()

Dim A(0 To 100) As Integer ‘存放每个分数的个数

Dim B(0 To 100) As Integer ‘存放每个分数的名次

Dim mc As Integer, score As Integer, i As Integer

For i = 0 To 100

    A(i) = 0

Next i

For i = 1 To recCount ‘计算每个分数的个数

                               (2)

Next i

mc = 1

For i = 100 To 0 Step -1 ‘计算每个分数的名次

    If A(i) <> 0 Then

        B(i) = mc

                              (3)

    End If

Next i

List2.Clear

List2.AddItem “姓名 分数 名次”

List2.AddItem “——————”

For i = 1 To recCount

    score = sScore(i)

    mc = B(sScore(i))

    List2.AddItem sName(i) + ads(score, 5) + “第” + ads(mc, 3) + “名”

Next i

End Sub

参考答案:

(1)7

(2)①ads=sx

       ②a(sscore(i))=a(sscore(i))+1

       ③mc=mc+a(i) 或mc=b(i)+a(i)

Python代码:

sname=['陈立潜','李小宝','厉铫天','杨加惠', '许多天','潘恩西','高力军','杨红升'] sscore=[75,87,100,65,76,100,65,96] reccount = 8 print(‘姓名’+’ ‘+’分数’) print(‘—-’+’—-’+’—-’)

for i in range(reccount):

    print(sname[i]+’ ‘+str(sscore[i]))

#整数转换成长度固定的字符串

def ads(x,n):

    sx = str(x)

    nx = len(sx)

    for i in range(n-nx):

        sx=’ ‘+sx

        return sx

a=[]

mc=1

for i in range(101):

    a.append(0)

b=a[:]

for i in range(reccount):

    a[sscore[i]]=a[sscore[i]]+1

for i in range(100,0,-1):

    if a[i]!=0:

        b[i]=mc

        mc=mc+a[i]

print(‘姓名 分数 名次’)

print(‘—————–’)

for i in range(reccount):

    score=sscore[i]

    mc=b[sscore[i]]

    print(sname[i]+ads(score,5)+’第’+ads(mc,3)+’名’) VB_Python代码对照算法百题(012) VB_Python代码对照算法百题(012) Python代码运行结果:

VB_Python代码对照算法百题(012)