P5741 【深基7.例10】旗鼓相當的對手 - 加強版

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章