解决“排名次”问题 喻远霖 2001年 30期 近来,我在学生考试完毕排定学习成绩的时候大伤了一番脑筋。后来,我试着用VB编写了一个“排名次”的程序:将已经统计好总分的一张成绩汇总表,按总分排出每个学生的名次。下面我就给大家简单介绍一下,希望能够对大家有所帮助。   首先,定义两个数组。一个数组CJ(N),用于存储每个学生的总分成绩(N为学生数),一个数组MC(N),用于存储相应的每个学生的名次。MC数组初始化为:   MC(1)=1,MC(2)=2,……,MC(N)=N   然后按照各人的总分,重新确定MC(N)的值:从第一个学生开始,将总分依次与其后的学生总分比较,根据比较的结果改变名次的值,方法如下:   先比较CJ(I)和CJ(J):   若CJ(I)<CJ(J),则MC(I)=MC(I)+1,MC(J)=MC(J)-1;   若CJ(I)=CJ(J),则MC(I)=MC(I)+1;   若CJ(I)>CJ(J),则MC(I)、MC(J)的值都不改变。   按此算法,可得到各人的名次(分数相等,名次相同)。可将此算法编写为一个过程,代码如下:   Sub pmc()   For I=1 to n   Mc(i)=I   Next I   For I=1 to n-1   For j=I+1 to n   If cj(i)<cj(j)then   Mc(i)=mc(i)+1   Mc(j)=mc(j)-1   Else if cj(i)=cj(j) then   Mc(i)=mc(i)+1   End if   End if   Next j   Next I   End sub   具体的程序这里就不赘述了。若你有更好的算法,敬请奉献给大家共享。