解题思路:
题目讲述的非常清楚,输入几个人和他们的成绩与学号,在按照他们的总分,语文成绩或者学号进行排名,所以应运用结构体,在编写几个子函数就可简便的做出题解,以下见代码参考
注意事项:
算总分的子函数要用一级指针。
total预先设为0否则后面运算的结果可能出错。
参考代码:
#include <iostream>
int n;
typedef struct student{
int score[3];
int total=0;
int m;
}student;
void calTotal(student* ps){
for(int i=0;i<3;i++)
ps->total += ps->score[i];
}
void exchange(student* x, student* y){
student temp = *x;
*x = *y;
*y = temp;
}
void sort(student s[]){
for(int j=n-1;j>0;j--){
for(int i=0;i<j;i++){
if(s[i].total<s[i+1].total)
exchange(&s[i], &s[i+1]);
if(s[i].total==s[i+1].total){
if(s[i].score[0]<s[i+1].score[0])
exchange(&s[i], &s[i+1]);
if(s[i].score[0]==s[i+1].score[0])
if(s[i].m>s[i+1].m)
exchange(&s[i], &s[i+1]);
}
}
}
}
int main(){
scanf("%d",&n);
student s[n];
for(int i=0;i<n;i++){
scanf("%d %d %d",&s[i].score[0],&s[i].score[1],&s[i].score[2]);
s[i].m=i+1;
}
for(int i=0;i<n;i++)
calTotal(s+i);
sort(s);
for(int i=0;i<5;i++)
printf("%d %d\n",s[i].m,s[i].total);
return 0;
}
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复