传智专修学院的“Java程序设计”班有 N ( 1 ≤ 100 ) N(1 \le 100) N(1≤100) 个学生,知道他们的个人信息和成绩:
由于期末考试有点难,为了让分数没那么难看,将期末考试成绩进行调分,调分后的期末成绩是将其开根号(sqrt)后乘 10 10 10,然后向上取整。
最后这个同学的总评得分是 60% 的调分后期末考试成绩,加上 40% 的平时分成绩,四舍五入精确到整数。
请对这些同学的成绩进行排名。
第一行一个整数 N N N。
接下来 N N N 行,每行包括一个字符串,和两个整数,用空格隔开,分表代表这个同学的姓名,平时分和期末考试成绩。
从高到低输出对应同学的姓名。如果两个同学的得分相同,原来输入顺序靠前的,输出时也应当靠前。
4
a 60 36
b 70 49
c 50 25
d 60 36
b 70
a 60
d 60
c 50
#include
#include
#include
typedef struct finalScore{
char name[21];
int score;
}finalScore;
void insert_sort(finalScore *num,int len){
for(int i=0;i<len;i++){
finalScore tmp = num[i];
int j = i;
while(j > 0 && num[j-1].score < tmp.score){
num[j] = num[j-1];
j--;
}
num[j] = tmp;
}
}
int main(){
int n;
char name[21];
int final,usual;
scanf("%d",&n);
finalScore f[110];
for(int i=0;i<n;i++){
scanf("%s %d %d",&name,&usual,&final);
strcpy(f[i].name,name);
int score = (int)(ceil(sqrt(final)*10)*0.6 + 0.4*usual + 0.5);
f[i].score = score;
}
insert_sort(f,n);
for(int i=0;i<n;i++){
printf("%s %d",f[i].name,f[i].score);
if(i!=n-1){
printf("\n");
}
}
return 0;
}
