专栏文章

题解:P5741 【深基7.例10】旗鼓相当的对手 - 加强版

P5741题解参与者 6已保存评论 5

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
5 条
当前快照
1 份
快照标识符
@miox4x33
此快照首次捕获于
2025/12/03 02:35
3 个月前
此快照最后确认于
2025/12/03 02:35
3 个月前
查看原文

P5741 【深基7.例10】旗鼓相当的对手 - 加强版

题解

很好的一道结构体练习题,非常适合初学结构体的蒟蒻。(其实我也是)
注意: 输出的姓名是按照字典序来排序的。
在这道题中,“旗鼓相当的对手”指的是每一科分差互相不超过 55 ,且总分分差互相不大于 1010 的学生。
首先,我们定义一个结构体,用来存储学生名称、语文成绩、数学成绩、英语成绩和总分。建议变量名写成学科名称,千万不要学习我的作死变量名,变量多了容易分不清。别问我怎么知道的
CPP
struct q{
	int a,b,c,zf;
	string d;
}a[1010];
在输入 NN 以后,使用 for 循环输入三科成绩,同时存储总分。
CPP
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 循环枚举每一个学生,寻找旗鼓相当的对手,判断字典序并输出。在判断分差时,可以用绝对值函数。
CPP
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 代码咯~~
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 条评论,欢迎与作者交流。

正在加载评论...