裁判测试程序
梦山高中现需要将某普通班的最优秀学生调整入理科实验班。为此,将从两个方面考察学生,一是数学和英语两门课的总分;另一个是所有四门课的总分。分别找出两科总分和全科总分的第一名,并从中决定调整人选。输入将首先输入学生数n, (n为不超过80的正整数);接下来依次输入各位学生的学号,数学、英语、语文、理科综合成绩。学号及四科成绩均为不超过300的正整数。
输出时:第一行输出两科总分第一的学号,第二行输出四科总分第一的学号。 约定在两位学生成绩相同时,优先选择学号较小的学生;各位学生的学号均不相同。
裁判测试程序样例:
#include <iostream>
using namespace std;
const int N=80;
struct Student{
int num;
int score;
};
/* 请在这里填写答案 */
int main()
{
int i, j, k, n;
bool s2(const Student &, const Student &);
bool s4(const Student &, const Student &);
Student st;
cin>>n;
for(i=0;i<n;i++){
cin>>st.num;
for(j=0;j<4;j++) cin>>st.score;
}
cout<<select(st, n, s2)<<endl;
cout<<select(st, n, s4)<<endl;
}
输入样例:
3
6 148 150 120 252
5 148 150 117 260
7 145 148 128 287
输出样例:
5
7
这题用C++怎么做 这道题目给定了一些学生的学号和成绩,要求我们找出两门课总分和四门课总分的第一名学生的学号。我们可以使用结构体来存储每个学生的学号和成绩,并定义两个比较函数来进行排序。
首先,我们定义一个结构体"Student",其中包含学号(num)和成绩(score)两个成员变量。
struct Student{
int num;
int score;
};
接下来,我们定义两个比较函数,分别用于比较两科总分和四科总分。其中,比较两科总分的比较函数s2按照题目要求比较两科总分,如果两个学生的两科总分不相等,则按照总分从大到小排列;如果两科总分相等,则按照学号从小到大排列。而比较四科总分的比较函数s4也是类似的逻辑。
bool s2(const Student &a, const Student &b){
if(a.score != b.score){
return a.score > b.score;
}
else{
return a.num < b.num;
}
}
bool s4(const Student &a, const Student &b){
if(a.score != b.score){
return a.score > b.score;
}
else{
return a.num < b.num;
}
}
接下来,在主函数中,我们首先读入学生数n,然后用一个for循环依次读入每个学生的学号和成绩,并将其存储到一个数组中。
然后,我们利用sort函数对两个数组进行排序,分别按照s2和s4来比较。
最后,我们通过输出两个数组的第一个元素的学号就可以得到答案。
完整代码如下:
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 80;
struct Student{
int num;
int score;
};
bool s2(const Student &a, const Student &b){
if(a.score != b.score){
return a.score > b.score;
}
else{
return a.num < b.num;
}
}
bool s4(const Student &a, const Student &b){
if(a.score != b.score){
return a.score > b.score;
}
else{
return a.num < b.num;
}
}
int main(){
int i, j, k, n;
Student st;
cin >> n;
for(i = 0; i < n; i++){
cin >> st.num;
int math, english, chinese, science;
cin >> math >> english >> chinese >> science;
st.score = math + english;
}
sort(st, st + n, s2);
cout << st.num << endl;
sort(st, st + n, s4);
cout << st.num << endl;
return 0;
}
这样,我们就可以得到两科总分和四科总分的第一名的学号了!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]