这题因为需要进行排序,所以就再建立一个结构体用来存储原来的顺序,最终顺序的输出借助排序完的与之前存储的原顺序,具体的请看我的代码。
问题描述
输入n名(100>n>0)同学的课程考试成绩,成绩均为浮点数(0<=成绩<=100),且n人成绩各不相同。编写程序,输出这n名同学成绩对应的名次,最高成绩名次为1,依次类推。
输入说明
输入为两行,第一行是一个整数n表示n个人;第二行为n个浮点数,表示n个人的成绩,成绩均为浮点数(0<=成绩<=100),且n人成绩各不相同。
输出说明
依次输出n个整数,分别表示各人成绩对应名次,数据间空一个空格。
输入样例
5
60 98 70.5 45 20
输出样例
3 1 2 4 5
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
typedef struct student{
double score;
int num;
int sequence;
}stu1, t, stu2;
int main()
{
int n, i, j;
scanf("%d", &n);
student stu1[n], t, stu2[n];
for(i=0;i<n;i++){
scanf("%lf", &stu1[i].score);
stu1[i].num = i+1;
}
for(i=0;i<n;i++){
stu2[i].score = stu1[i].score;
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(stu1[i].score>stu1[j].score){
t = stu1[i];
stu1[i] = stu1[j];
stu1[j] = t;
}
}
}
// for(i=0;i<n;i++){
// printf("%d\n", stu1[i].num);
// }
int k = 0;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(stu1[j].score!=stu2[i].score){
k++;
}else{
printf("%d", k+1);
k=0; //将k初始化
break;
}
}
if(i!=n-1) printf(" ");
}
return 0;
}