牛客网NC22015:最大值和最小值
题目描述
题目要求
输入:一行,包含三个整数 a, b, c (1≤a,b,c≤1000000)
输出:两行,第一行输出最大数,第二行输出最小数。
样例输入:
1 2 3
样例输出:
The maximum number is : 3
The minimum number is : 1
解题思路
这道题目要求我们找出三个数中的最大值和最小值。解题思路非常直接:
- 初始化最大值和最小值为第一个数 a
- 将第二个数 b 与当前最大值比较,如果 b 更大,则更新最大值;否则,与当前最小值比较,如果 b 更小,则更新最小值
- 将第三个数 c 与当前最大值比较,如果 c 更大,则更新最大值
- 将第三个数 c 与当前最小值比较,如果 c 更小,则更新最小值
- 按照要求格式输出最大值和最小值
这种方法的时间复杂度是 O(1),空间复杂度也是 O(1),对于只有三个数的情况非常高效。
代码实现
#include<bits/stdc++.h>
using namespace std;int main(){int a, b, c, max, min;// 读取三个整数cin >> a >> b >> c;// 初始化最大值和最小值为第一个数max = a;min = a;// 处理第二个数if(b >= max)max = b;elsemin = b;// 处理第三个数(最大值)if(c >= max)max = c;// 处理第三个数(最小值)。注意这两个判断是独立的,因为 c 可能既不是最大值也不是最小值if(c < min)min = c;// 按要求格式输出结果printf("The maximum number is : %d\n", max);printf("The minimum number is : %d", min);return 0;
}
代码分析
-
头文件引入:
#include<bits/stdc++.h>
包含了 C++ 标准库中常用的所有头文件,在竞赛中常用于简化代码。 -
变量定义:定义了五个整型变量 a, b, c 用于存储输入的三个数,max 和 min 分别用于记录最大值和最小值。
-
初始化:将 max 和 min 都初始化为第一个数 a,这是一个常见的初始化技巧。
-
处理第二个数:
- 如果 b 大于等于当前最大值,则更新最大值为 b
- 否则,说明 b 小于 a,更新最小值为 b(因为此时 min=a,而 b<a)
-
处理第三个数:
- 先判断 c 是否大于等于当前最大值,如果是则更新最大值
- 再判断 c 是否小于当前最小值,如果是则更新最小值
- 注意这两个判断是独立的,因为 c 可能既不是最大值也不是最小值
-
输出结果:使用 printf 函数按照题目要求的格式输出最大值和最小值。
算法优化点
这个算法已经非常简洁高效,对于只有三个数的情况,无法再进一步优化时间和空间复杂度。不过,如果处理的是任意数量的数据,我们可以使用更通用的方法,如:
- 使用库函数
std::max()
和std::min()
- 对于多个数的情况,可以使用循环或算法库中的
std::max_element()
和std::min_element()
总结
这道题目虽然简单,但它展示了解决最值问题的基本思路。在实际编程中,找最值是一个非常常见的操作,掌握这种基础算法对于解决更复杂的问题非常有帮助。
另外,本题也体现了程序设计中的一个重要思想:通过合理的初始化和条件判断,可以减少冗余操作,提高代码效率。