题解:洛谷 P5728 【深基5.例5】旗鼓相当的对手

【题目来源】

洛谷:P5728 【深基5.例5】旗鼓相当的对手 - 洛谷

【题目描述】

现有 \(N\) 名同学参加了期末考试,并且获得了每名同学的信息:语文、数学、英语成绩(均为不超过 \(150\) 的自然数)。如果某对学生 <\(i,j\)> 的每一科成绩的分差都不大于 \(5\),且总分分差不大于 \(10\),那么这对学生就是“旗鼓相当的对手”。现在想知道这些同学中,有几对“旗鼓相当的对手”?同样一个人可能会和其他好几名同学结对。

【输入】

第一行一个正整数 \(N\)

接下来 \(N\) 行,每行三个整数,其中第 \(i\) 行表示第 \(i\) 名同学的语文、数学、英语成绩。最先读入的同学编号为 \(1\)

【输出】

输出一个整数,表示“旗鼓相当的对手”的对数。

【输入样例】

3 90 90 90 85 95 90 80 100 91

【输出样例】

2

【算法标签】

《洛谷 P5728 旗鼓相当的对手》 #模拟#

【代码详解】

#include <bits/stdc++.h>  // 包含标准库头文件(万能头文件)
using namespace std;      // 使用标准命名空间

/**
 * 主函数 - 程序入口
 * @return 程序执行状态码(0表示成功)
 */
int main()
{
    int n;               // 定义变量:学生人数
    int yu[1005];        // 定义数组:存储语文成绩
    int shu[1005];       // 定义数组:存储数学成绩
    int yin[1005];       // 定义数组:存储英语成绩
    int sum[1005];       // 定义数组:存储总分
    int ans = 0;         // 定义变量:符合条件的对手对数
  
    cin >> n;            // 输入学生人数
  
    // 输入每个学生的三科成绩并计算总分
    for (int i = 1; i <= n; i++) 
    {
        cin >> yu[i] >> shu[i] >> yin[i];
        sum[i] = yu[i] + shu[i] + yin[i];
    }
  
    // 遍历所有学生组合,统计符合条件的对手对数
    for (int i = 1; i <= n; i++) 
    {
        for (int j = i + 1; j <= n; j++) 
        {
            // 旗鼓相当的对手判定条件:
            // 1. 各科成绩差不超过5分
            // 2. 总分差不超过10分
            if (abs(yu[i] - yu[j]) <= 5 && 
                abs(shu[i] - shu[j]) <= 5 &&
                abs(yin[i] - yin[j]) <= 5 &&
                abs(sum[i] - sum[j]) <= 10) 
            {
                ans++;  // 符合条件的对手对数加1
            }
        }
    }
  
    cout << ans << endl;  // 输出结果
  
    return 0;             // 程序正常结束
}

【运行结果】

3
90 90 90
85 95 90
80 100 91
2
posted @ 2026-02-16 15:41  团爸讲算法  阅读(1)  评论(0)    收藏  举报