专栏文章
题解:P5741 【深基7.例10】旗鼓相当的对手 - 加强版
P5741题解参与者 6已保存评论 5
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @miox4x33
- 此快照首次捕获于
- 2025/12/03 02:35 3 个月前
- 此快照最后确认于
- 2025/12/03 02:35 3 个月前
P5741 【深基7.例10】旗鼓相当的对手 - 加强版
题解
很好的一道结构体练习题,非常适合初学结构体的蒟蒻。(其实我也是)
注意: 输出的姓名是按照字典序来排序的。
在这道题中,“旗鼓相当的对手”指的是每一科分差互相不超过 ,且总分分差互相不大于 的学生。
首先,我们定义一个结构体,用来存储学生名称、语文成绩、数学成绩、英语成绩和总分。建议变量名写成学科名称,千万不要学习我的作死变量名,变量多了容易分不清。别问我怎么知道的。
CPPstruct q{
int a,b,c,zf;
string d;
}a[1010];
在输入 以后,使用 for 循环输入三科成绩,同时存储总分。
CPPfor(int i=1;i<=n;i++){
cin>>a[i].d>>a[i].a>>a[i].b>>a[i].c;
a[i].zf=a[i].a+a[i].b+a[i].c;
}
然后双层 for 循环枚举每一个学生,寻找旗鼓相当的对手,判断字典序并输出。在判断分差时,可以用绝对值函数。
CPPfor(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
if(abs(a[i].a-a[j].a)<=5&&abs(a[i].b-a[j].b)<=5&&abs(a[i].c-a[j].c)<=5&&abs(a[i].zf-a[j].zf)<=10){//abs() 绝对值函数
if(a[i].d<a[j].d) cout<<a[i].d<<" "<<a[j].d<<endl;
else cout<<a[j].d<<" "<<a[i].d<<endl;
}
}
}
都看懂的同学可以看你们最喜欢的完整 AC 代码咯~~
CPP#include<bits/stdc++.h>
using namespace std;
struct q{
int a,b,c,zf;
string d;
}a[1010];//结构体
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].d>>a[i].a>>a[i].b>>a[i].c;
a[i].zf=a[i].a+a[i].b+a[i].c;
}//输入
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
if(abs(a[i].a-a[j].a)<=5&&abs(a[i].b-a[j].b)<=5&&abs(a[i].c-a[j].c)<=5&&abs(a[i].zf-a[j].zf)<=10){
if(a[i].d<a[j].d) cout<<a[i].d<<" "<<a[j].d<<endl;
else cout<<a[j].d<<" "<<a[i].d<<endl;
}
}
}//输出
return 0;//美丽好习惯
}
完结撒花!
相关推荐
评论
共 5 条评论,欢迎与作者交流。
正在加载评论...