C++ 算法考级专栏
真题分析、矩阵探测、递归回溯与基础语法
🎨 视觉封面【GESP】C++三级练习 luogu-P5728 【深基5.例5】旗鼓相当的对手
GESP C++三级练习,一维数组练习,难度★★☆☆☆。
luogu-P5728 【深基5.例5】旗鼓相当的对手
题目要求
题目描述
现有 名同学参加了期末考试,并且获得了每名同学的信息:语文、数学、英语成绩(均为不超过 的自然数)。如果某对学生 的每一科成绩的分差都不大于 ,且总分分差不大于 ,那么这对学生就是“旗鼓相当的对手”。现在想知道这些同学中,有几对“旗鼓相当的对手”?同样一个人可能会和其他好几名同学结对。
输入格式
第一行一个正整数 。
接下来 行,每行三个整数,其中第 行表示第 名同学的语文、数学、英语成绩。最先读入的同学编号为 。
输出格式
输出一个整数,表示“旗鼓相当的对手”的对数。
输入输出样例 #1
输入 #1
3
90 90 90
85 95 90
80 100 91
输出 #1
2
说明/提示
数据保证, 且每科成绩为不超过 的自然数。
题目分析
解题思路
本题的解题思路如下:
-
问题分析:
- 输入学生总数 ()
- 每个学生有三科成绩:语文、数学、英语(均为不超过150的自然数)
- 需要找出"旗鼓相当的对手"对数
-
解题方法:
- 核心思路:
- 使用三个数组分别存储三科成绩
- 双重循环遍历所有可能的学生对
- 判断每对学生是否满足"旗鼓相当"条件
- 实现方式:
- 读取N和所有学生成绩
- 遍历所有可能的学生对(i,j),其中j>i避免重复
- 检查该对学生是否满足条件并计数
- 核心思路:
-
实现要点:
- 旗鼓相当的条件:
- 每科成绩分差不超过5分
- 总分差不超过10分
- 需要使用绝对值函数计算分差
- 注意数组大小要根据输入的N来定义
- 旗鼓相当的条件:
注:本题可以是用一个二维数组来存储所有学生的成绩,然后使用双重循环遍历所有可能的学生对。但是考虑到二维数组非3级大纲范围内要求,因此特意用3个一维数组实现。 {: .prompt-tip}
复杂度分析:
- 时间复杂度:,其中N为学生总数
- 空间复杂度:,需要存储N个学生的三科成绩
示例代码
#include <cmath>
#include <iostream>
int main() {
// 读取学生人数N
int N;
std::cin >> N;
// 定义三个数组分别存储语文、数学、英语成绩
int one_ary[N]; // 语文成绩数组
int two_ary[N]; // 数学成绩数组
int three_ary[N]; // 英语成绩数组
// 读入每个学生的三科成绩
for (int i = 0; i < N; i++) {
std::cin >> one_ary[i] >> two_ary[i] >> three_ary[i];
}
// 统计旗鼓相当对手的对数
int count = 0;
// 双重循环遍历所有可能的学生对
for (int i = 0; i < N; i++) {
for (int j = i + 1; j < N; j++) {
// 判断是否为旗鼓相当的对手:
// 1. 每科分差不超过5分
// 2. 总分差不超过10分
if (std::abs(one_ary[j] - one_ary[i]) <= 5 &&
std::abs(two_ary[j] - two_ary[i]) <= 5 &&
std::abs(three_ary[j] - three_ary[i]) <= 5 &&
std::abs(one_ary[i] + two_ary[i] + three_ary[i] -
(one_ary[j] + two_ary[j] + three_ary[j])) <= 10) {
count++;
}
}
}
// 输出结果
std::cout << count << std::endl;
return 0;
}
所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI
欢迎加入:C++ GESP/CSP 考级答疑群(688906745) 与 Java/Python交流群(982860385),点击可直接加群。
猜你想读 · 相关文章推荐
【GESP】C++三级练习 luogu-B2064, 斐波那契数列
斐波那契数列本身可能并不一定涉及数组知识点,但本题中要求的输入、输出格式涉及到三级知识点一维数组的使用。 题目本身对小学生来说,也是有一定难度的。
【GESP】C++三级练习 luogu-B3661, [语言月赛202209] 排排队
三级知识点一维数组练习,除了应用了数组以外,其余逻辑比较简单,适合初学者。
【GESP】C++三级练习 luogu-B2087, 与指定数字相同的数的个数
GESP三级知识点一维数组练习,题目本身逻辑不复杂。
OneCoder (lihongzheshuai)
一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com