旗鼓相当的对手(加强版)"/>
C/C++语言100题练习计划 100——旗鼓相当的对手(加强版)
名人说:一愿识尽天下好人,二愿读尽世间好书,三愿看尽世间好山水。——陈继儒 | 小窗幽记
进度:C/C++语言100题练习计划专栏,目前100/100(专栏完结篇✔)
本专栏至此就正式完结啦 ✔,希望大家看完本专栏文章后能够有哪怕一点点收获。写这些文章,也希望会是有益且有意义的。如果专栏哪里有不足之处,还请多多包涵,然后如果哪里有错误或者建议,还希望指出!非常感谢大家的陪伴,(❦_❦) 期待下次再见啦!ヾ( ̄▽ ̄)Bye ~ Bye~
一、问题呈现
1.问题描述
Problem Description
现有 N ( N ≤ 1000 ) N(N\le 1000) N(N≤1000) 名同学参加了期末考试,并且获得了每名同学的信息:姓名(不超过 8 8 8 个字符的字符串,没有空格)、语文、数学、英语成绩(均为不超过 150 150 150 的自然数)。如果某对学生 < i , j > \text{<}i,j\text{>} <i,j> 的每一科成绩的分差都不大于 5 5 5,且总分分差不大于 10 10 10,那么这对学生就是“旗鼓相当的对手”。现在我们想知道这些同学中,哪些是“旗鼓相当的对手”?请输出他们的姓名。
所有人的姓名是按照字典序给出的,输出时也应该按照字典序输出所有对手组合。也就是说,这对组合的第一个名字的字典序应该小于第二个;如果两个组合中第一个名字不一样,则第一个名字字典序小的先输出;如果两个组合的第一个名字一样但第二个名字不同,则第二个名字字典序小的先输出。
2.输入输出
Input
第一行输入一个正整数 N N N,表示学生个数。
第二行开始,往下 N N N 行,对于每一行首先先输入一个字符串表示学生姓名,再输入三个自然数表示语文、数学、英语的成绩。均用空格相隔。
Output
输出若干行,每行两个以空格隔开的字符串,表示一组旗鼓相当的对手。注意题目描述中的输出格式。
3.测试样例
Sample Input
3
fafa 90 90 90
lxl 95 85 90
senpai 100 80 91
Sample Output
fafa lxl
lxl senpai
★提示:
数据保证, 1 ≤ N ≤ 1000 1 \leq N \leq 1000 1≤N≤1000,姓名为长度不超过 8 8 8 的字符串,语文、数学、英语成绩均为不超过 150 150 150 的自然数。
二、源码实现
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
const int maxn=1e3+10;//定义结构体
struct Stu
{string name;//姓名int Chinese;//语文int Math;//数学int English;//英语
}a[maxn];int main()
{int n;//输入学生的人数ncin>>n;//输入n个学生的姓名、语、数、英的成绩for(int i=1;i<=n;i++){cin>>a[i].name>>a[i].Chinese>>a[i].Math>>a[i].English;}for(int i=1;i<=n;i++){for(int j=i+1;j<=n;j++){//每一门分数相减int ans=abs(a[i].Chinese-a[j].Chinese);int ans1=abs(a[i].Math-a[j].Math);int ans2=abs(a[i].English-a[j].English);//总分相减int ans3=abs(a[i].English+a[i].Chinese+a[i].Math-a[j].Chinese -a[j].Math-a[j].English);//判断是否符合旗鼓相当的对手,如果符合则输出if(ans<=5&&ans1<=5&&ans2<=5&&ans3<=10){//判断字典序if(a[i].name>a[j].name)cout<<a[j].name<<" "<<a[i].name<<"\n";//字典序小的在前面else cout<<a[i].name<<" "<<a[j].name<<"\n";}}}//返回0,程序执行结束return 0;
}
★关于本题思路:
如果某对学生 <i,j> 的每一科成绩的分差都不大于 5,且总分分差不大于 10,那么这对学生就是“旗鼓相当的对手”。
在这句话中,如果要输出,必须要满足两个条件
:
每门分差 <= 5 ;总分分差 <= 10。
那么怎么设计呢?是时候运用我们的结构体了。
结构体定义完毕后,我们可以借助
循环
输入n个学生的姓名以及成绩。
之后,用两层循环分别枚举i,j,分别比较总成绩和每一门成绩。
最后,if条件语句判断是否符合旗鼓相当的对手,如果符合则输出。
对了,题目中有提到字典序,注意最后输出前要用字典序处理判断一下。
三、测试结果
3
fafa 90 90 90
lxl 95 85 90
senpai 100 80 91
fafa lxl
lxl senpai--------------------------------
Process exited after 1.583 seconds with return value 0
请按任意键继续. . .
Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder)
如果对大家有帮助的话,希望大家能多多点赞+关注!这样我动力会更足哦! ღ( ´・ᴗ・` )比心
更多推荐
C/C++语言100题练习计划 100——旗鼓相当的对手(加强版)
发布评论