信息学奥赛一本通-编程启蒙(C++版)在线评测系统
3438:练76.2 精挑细选
解题思路
- 数据存储:定义一个结构体来存储每根钢管的长度、直径和编码信息。通过循环读取输入数据,将每根钢管的信息存入结构体数组。
- 挑选规则应用:
- 初始化一个变量用于存储当前挑选出的钢管信息,首先假设第一根钢管为符合条件的钢管。
- 遍历结构体数组,根据挑选规则依次比较每根钢管与当前挑选出的钢管。若遇到长度更长的钢管,则更新当前挑选的钢管为该钢管。
- 若长度相同,比较直径,若直径更细,则更新当前挑选的钢管。
- 若长度和直径都相同,比较编码,若编码更大,则更新当前挑选的钢管。
- 输出结果:遍历结束后,输出最终挑选出的钢管的编码。
C++代码实现
#include<bits/stdc++.h>
using namespace std;
// 定义钢管结构体
struct P {
int l;
int d;
int c;
};
int main() {
int n;
cin >> n;
P p[n];
for (int i = 0; i < n; i++) {
cin >> p[i].l >> p[i].d >> p[i].c;
}
P res = p[0];
for (int i = 1; i < n; i++) {
if (p[i].l > res.l) {
res = p[i];
} else if (p[i].l == res.l) {
if (p[i].d < res.d) {
res = p[i];
} else if (p[i].d == res.d) {
if (p[i].c > res.c) {
res = p[i];
}
}
}
}
cout << res.c << endl;
return 0;
}
代码解释
- 结构体
P
:定义了一个结构体P
,用于存储钢管的长度l
、直径d
和编码c
。 - 主函数
main
:- 读取钢管数量
n
。 - 创建结构体数组
p
来存储所有钢管的信息,通过循环读取每根钢管的长度、直径和编码。 - 初始化
res
为数组中的第一根钢管,表示当前挑选出的钢管。 - 通过循环遍历数组,从第二根钢管开始,根据挑选规则依次比较每根钢管与
res
。- 首先比较长度,如果当前钢管长度大于
res
的长度,则更新res
为当前钢管。 - 如果长度相同,比较直径,若当前钢管直径小于
res
的直径,则更新res
。 - 如果长度和直径都相同,比较编码,若当前钢管编码大于
res
的编码,则更新res
。
- 首先比较长度,如果当前钢管长度大于
- 最后输出
res
的编码,即挑选出的钢管的编码。
- 读取钢管数量
知识总结
- 结构体的使用:学会使用结构体来整合相关的数据,方便对复杂数据的管理和操作。在本题中,通过结构体将钢管的不同属性整合在一起,便于后续按照规则进行挑选。
- 条件判断:通过多层嵌套的条件判断语句,实现了复杂的挑选规则。这要求对逻辑判断有清晰的理解,确保按照题目要求的优先级进行比较和选择。
- 数据遍历与比较:通过循环遍历数组中的每个元素,并与当前最优解进行比较,不断更新最优解。这种方法在解决需要从多个数据中挑选符合特定条件的数据的问题中非常常见。