C/C++语言100题练习计划 100——旗鼓相当的对手(加强版)

编程入门 行业动态 更新时间:2024-10-28 18:34:01

C/C++语言100题练习计划 100——<a href=https://www.elefans.com/category/jswz/34/1731629.html style=旗鼓相当的对手(加强版)"/>

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——旗鼓相当的对手(加强版)

本文发布于:2024-02-13 01:19:27,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1690153.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:旗鼓相当   加强版   对手   语言   计划

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!