https://www.luogu.com.cn/problem/P5741
題目描述
現有 N(N≤1000) 名同學參加了期末考試,並且獲得了每名同學的信息:姓名(不超過 8 個字符的字符串,沒有空格)、語文、數學、英語成績(均爲不超過 150 的自然數)。如果某對學生 <i,j> 的每一科成績的分差都不大於 5,且總分分差不大於 10,那麼這對學生就是“旗鼓相當的對手”。現在我們想知道這些同學中,哪些是“旗鼓相當的對手”?請輸出他們的姓名。
所有人的姓名是按照字典序給出的,輸出時也應該按照字典序輸出所有對手組合。也就是說,這對組合的第一個名字的字典序應該小於第二個;如果兩個組合中第一個名字不一樣,則第一個名字字典序小的先輸出;如果兩個組合的第一個名字一樣但第二個名字不同,則第二個名字字典序小的先輸出。
輸入格式
無
輸出格式
無
輸入輸出樣例
輸入 #1 複製
3
fafa 90 90 90
lxl 95 85 90
senpai 100 80 91
輸出 #1 複製
fafa lxl
lxl senpai
結構體爽歪歪丫丫丫(字符數組的用str函數,比較大小寫用strcmp)
#include<bits/stdc++.h>
using namespace std;
#define N 1005
struct node{
char ch[10];
int chinese, math, english, s;
}a[N];
int main(){
int n;
cin >> n;
for(int i=1; i<=n; ++i){
cin >> a[i].ch >> a[i].chinese >> a[i].math >> a[i].english;
a[i].s = a[i].chinese + a[i].math + a[i].english;
}
for(int i=1; i<=n; ++i){
for(int j=i+1; j<=n; ++j){
if(abs(a[i].chinese - a[j].chinese) <= 5 && abs(a[i].math - a[j].math) <= 5 && abs(a[i].english - a[j].english) <= 5 && abs(a[i].s - a[j].s) <= 10){
if(strcmp(a[i].ch , a[j].ch) > 0)
cout << a[j].ch << " " << a[i].ch << endl;
else
cout << a[i].ch << " " << a[j].ch << endl;
}
}
}
return 0;
}