题解:P5741 【深基7.例10】旗鼓相当的对手 - 加强版
P5741 【深基7.例10】旗鼓相当的对手 - 加强版
题解
很好的一道结构体练习题,非常适合初学结构体的蒟蒻。(其实我也是)
注意: 输出的姓名是按照字典序来排序的。
在这道题中,“旗鼓相当的对手”指的是每一科分差互相不超过
首先,我们定义一个结构体,用来存储学生名称、语文成绩、数学成绩、英语成绩和总分。建议变量名写成学科名称,千万不要学习我的作死变量名,变量多了容易分不清。别问我怎么知道的。
struct q{
int a,b,c,zf;
string d;
}a[1010];
在输入
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 循环枚举每一个学生,寻找旗鼓相当的对手,判断字典序并输出。在判断分差时,可以用绝对值函数。
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){//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 代码咯~~
#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;//美丽好习惯
}
其实这道题字典序是个摆设但我还是写了。
完结撒花!
电砸三巨力逃走。