题解
三个数中最大的数
1 条题解
-
0
解题思路
要在一堆数里找出最大的一个,最简单的办法是“打擂台”:先假设第一个数是“擂主”(当前最大值),然后让后面的数依次上台挑战,谁大谁就当新的擂主。最后留在台上的一定是最大的数。
对于三个数 x、y、z,具体步骤如下:
- 先把 x 当作目前最大的数,存进变量 max 里;
- 让 y 上台挑战:如果 y > max,说明 y 更大,把 max 更新成 y;
- 让 z 上台挑战:如果 z > max,把 max 更新成 z;
- 比完所有数后,max 里存的就是三个数中的最大值。
用“打擂台”的好处是思路统一、好记,以后即使有 100 个数,也可以用同样的套路,只要把挑战的步骤放进循环里就行。
因为题目保证三个数互不相同,所以不用担心两个数相等的情况,用大于号 > 判断就足够了。
参考代码
#include using namespace std;
int main() { int x, y, z; // x、y、z 表示输入的三个数 cin >> x >> y >> z; // 读入三个数
int max = x; // 先把第一个数 x 当作“擂主”(当前最大值) if (y > max) { // 第二个数 y 上台挑战 max = y; // y 更大,让 y 当新的擂主 } if (z > max) { // 第三个数 z 再上台挑战 max = z; // z 更大,让 z 当新的擂主 } cout << max << endl; // 打完擂台,max 就是最大的数 return 0;}
复杂度分析
本题固定只有 3 个数,程序做 2 次比较就能找出最大值,运算次数固定,与数的大小无关,时间复杂度是 O(1)。只用了 4 个 int 变量,空间复杂度也是 O(1)。如果以后要比较 n 个数,就需要用循环,时间复杂度会变成 O(n),但本题不需要。
- 1