#P14075. 【循环3】最大值查询问题①
-
ID: 1843
Tried: 1283
Accepted: 373
Difficulty: 4
【循环3】最大值查询问题①
【循环3】最大值查询问题①
前言
在正式讲解本题之前,先做一些知识补充:
- Python 的三目运算符
1. Python 的三目运算符
在 Python 中,三目运算符(也称为条件表达式)是一种简洁的条件判断语法。其语法格式为:
expression1 if condition else expression2
含义
- condition:条件表达式,返回一个布尔值(
True
或False
)。 - expression1:当条件为
True
时执行的表达式。 - expression2:当条件为
False
时执行的表达式。
整个表达式的结果是 expression1 或 expression2 的值,具体取决于 condition
的结果。
用法示例
示例 1:基本用法
a = 10
b = 20
max_value = a if a > b else b # 如果 a > b 为 True,max_value 等于 a,否则等于 b
print("The maximum is:", max_value)
输出:
The maximum is: 20
示例 2:嵌套使用
a = 10
b = 20
c = 15
max_value = a if a > b else (b if b > c else c)
print("The maximum is:", max_value)
解释:
- 如果
a > b
为True
,直接取a
。 - 如果
a > b
为False
,继续判断b > c
,为True
取b
,否则取c
。
输出:
The maximum is: 20
注意事项
-
可读性:
- 三目运算符适用于简单的条件判断,嵌套使用时可能会降低代码的可读性。对于复杂的逻辑,建议使用
if-else
结构。
- 三目运算符适用于简单的条件判断,嵌套使用时可能会降低代码的可读性。对于复杂的逻辑,建议使用
-
返回值类型:
- 三目运算符的结果类型由
expression1
和expression2
共同决定。如果两者类型不同,可能会发生隐式类型转换。
a = 10 b = 20.5 result = a if a > b else b # result 的类型为 float print(result) # 输出: 20.5
- 三目运算符的结果类型由
-
仅作为表达式:
- 三目运算符只能用于表达式中,不能直接用于语句外。例如,不能单独写
condition ? expr1 : expr2
,需要将结果赋值给变量或用于函数调用中。
- 三目运算符只能用于表达式中,不能直接用于语句外。例如,不能单独写
使用场景
- 用于简化简单的条件判断。
- 替代
if-else
结构,使代码更加简洁。
三目运算符 vs if-else
特性 | 三目运算符 | if-else |
---|---|---|
简洁性 | 更简洁,适合简单条件判断 | 适合复杂逻辑 |
可读性 | 复杂时降低 | 可读性较高 |
多分支支持 | 仅支持单条件或嵌套 | 直接支持多条件分支 |
语法结构 | 表达式(返回值) | 语句块(可执行多条语句) |
示例对比:
三目运算符:
max_value = a if a > b else b
if-else:
if a > b:
max_value = a
else:
max_value = b
根据实际需求选择适合的方式!
题解
题面描述
给定一个整数数组 arr
,请找出数组中的最大值及其在数组中的下标序列。
您需要编写一个程序,输出数组中的最大值以及所有出现该最大值的下标。
输入描述
- 第一行输入一个整数
n
(1 ≤ n ≤ 1000
),表示数组的大小。 - 接下来一行输入
n
个整数,表示数组的元素,元素范围为1 ≤ arr[i] ≤ 1000
。
输出描述
- 第一行输出数组中的最大值。
- 第二行输出所有最大值的下标(从
0
开始),下标之间以空格分隔。
样例1
输入
5
1 3 5 3 5
输出
5
2 4
思路
我们需要找出数组中的最大值以及所有出现该最大值的下标。具体步骤如下:
-
读取输入:
- 读取数组的大小
n
。 - 读取数组的元素并存储在列表中。
- 读取数组的大小
-
找出最大值:
- 使用内置函数
max()
找出数组中的最大值。
- 使用内置函数
-
找出所有最大值的下标:
- 遍历数组,记录所有等于最大值的元素的下标。
-
输出结果:
- 输出最大值。
- 输出所有最大值的下标,使用空格分隔。
代码解释
-
读取输入
n = int(input()) arr = list(map(int, input().split()))
input()
函数用于从标准输入读取一行输入。int()
函数将输入的字符串转换为整数类型,存储在变量n
中。map(int, input().split())
将输入的字符串按空格分割,并转换为整数,最后使用list()
转换为列表arr
。
-
找出最大值
max_value = max(arr)
- 使用内置函数
max()
找出列表arr
中的最大值,存储在变量max_value
中。
- 使用内置函数
-
找出所有最大值的下标
indices = [str(index) for index, value in enumerate(arr) if value == max_value]
- 使用列表推导式和
enumerate()
函数遍历列表arr
。 enumerate(arr)
会返回一个包含元素下标和元素值的迭代器。- 如果当前元素
value
等于max_value
,则将其下标index
转换为字符串并添加到列表indices
中。
- 使用列表推导式和
-
输出结果
print(max_value) print(' '.join(indices))
print(max_value)
输出最大值。' '.join(indices)
将列表indices
中的所有下标字符串用空格连接起来,形成一个单一的字符串,然后输出。
完整示例
# 读取数组大小
n = int(input())
# 读取数组元素
arr = list(map(int, input().split()))
# 找出最大值
max_value = max(arr)
# 找出所有最大值的下标
indices = [str(index) for index, value in enumerate(arr) if value == max_value]
# 输出最大值
print(max_value)
# 输出所有最大值的下标,空格分隔
print(' '.join(indices))
总结
- 输入处理:使用
input()
函数读取并转换输入数据,map()
和列表推导式简化数据处理。 - 内置函数:
max()
函数快速找出列表中的最大值。 - 遍历与条件判断:使用
enumerate()
函数结合列表推导式高效地找到所有满足条件的下标。 - 输出格式:使用
' '.join()
将列表中的元素转换为指定格式的字符串,方便输出。
题目描述:
给定一个整数数组 arr,请找出数组中的最大值及其在数组中的下标序列。
您需要编写一个程序,输出数组中的最大值以及所有出现该最大值的下标。
输入:
- 第一行输入一个整数 n (1≤n≤1000),表示数组的大小。
- 第二行输入 n 个整数 arr[i] (1≤arr[i]≤106),表示数组的元素。
输出:
- 第一行输出数组中的最大值。
- 第二行输出所有最大值的下标,按升序排列,使用空格分隔。
示例:
输入:
5
1 3 7 2 7
输出:
7
2 4
提示:
- 如果最大值出现多次,输出所有下标。
- 下标从 0 开始计数。