说明 假设有一教师依学生座号输入考试分数,现希望在输入完毕后自动显示学生分数的排行 ,当然学生的分数可能相同。
解法:
用排名的阵列去走访分数阵列
排名阵列rank[N+2]
接下来走访分数阵列score[N+1]:
并在分数所对应的排行阵列索引位置加1,如60分,则rank[60]++
将分数排行的最右边设置为1,即rank[N+1]=1,然后依次将右边的元素加置左边一个元素
c代码
#include<stdio.h>
#include<stdlib.h>
#define N 100
int main()
{
int score[N + 1] = { 0 }; //分数
int rank[N + 2] = { 0 }; //排名
int i = 0;
while (1)
{
printf("请输入分数:");
scanf_s("%d", &score[i]);
if (score[i] == -1)
break;
rank[score[i]]++;
i++;
}
rank[N + 1] = 1;
for (int j = N; j >= 0; j--)
{
rank[j] = rank[j + 1] + rank[j];
}
for (int j = 0; j < i; j++)
{
printf("%d %d\n", score[j], rank[score[j] + 1]);
}
system("pause");
return 0;
}
python(法二)
将每一个分数起始看成第一,和其他分数做对比,如果小于其他分数,则加1
如score[3]={60,56,90},rank[3]={0}
首先rank[0]=1,(即将score[0],看成第一),60<90,则rank[0]+1=2,成第二名,同理,对56,90进行同样对比
import numpy as np
N=100
score=np.zeros(N+1)
rank=np.zeros(N+1)
count =0
if __name__=="__main__":
while 1:
score[count]=int(input("输入分数:"))
if score[count]==-1:
break
count+=1
for i in range(count+1):
rank[i]=1
for j in range(count+1):
if score[i]<score[j]:
rank[i]+=1
pass
pass
pass
for i in range(count):
print("%d %d"%(score[i],rank[i]))
pass