牛客网NC22015:最大值和最小值

牛客网NC22015:最大值和最小值

题目描述

题目要求

输入 :一行,包含三个整数 a, b, c (1≤a,b,c≤1000000)
输出:两行,第一行输出最大数,第二行输出最小数。

样例输入

复制代码
1 2 3

样例输出

复制代码
The maximum number is : 3
The minimum number is : 1

解题思路

这道题目要求我们找出三个数中的最大值和最小值。解题思路非常直接:

  1. 初始化最大值和最小值为第一个数 a
  2. 将第二个数 b 与当前最大值比较,如果 b 更大,则更新最大值;否则,与当前最小值比较,如果 b 更小,则更新最小值
  3. 将第三个数 c 与当前最大值比较,如果 c 更大,则更新最大值
  4. 将第三个数 c 与当前最小值比较,如果 c 更小,则更新最小值
  5. 按照要求格式输出最大值和最小值

这种方法的时间复杂度是 O(1),空间复杂度也是 O(1),对于只有三个数的情况非常高效。

代码实现

cpp 复制代码
#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;
    else
        min = 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;
}

代码分析

  1. 头文件引入#include<bits/stdc++.h> 包含了 C++ 标准库中常用的所有头文件,在竞赛中常用于简化代码。

  2. 变量定义:定义了五个整型变量 a, b, c 用于存储输入的三个数,max 和 min 分别用于记录最大值和最小值。

  3. 初始化:将 max 和 min 都初始化为第一个数 a,这是一个常见的初始化技巧。

  4. 处理第二个数

    • 如果 b 大于等于当前最大值,则更新最大值为 b
    • 否则,说明 b 小于 a,更新最小值为 b(因为此时 min=a,而 b<a)
  5. 处理第三个数

    • 先判断 c 是否大于等于当前最大值,如果是则更新最大值
    • 再判断 c 是否小于当前最小值,如果是则更新最小值
    • 注意这两个判断是独立的,因为 c 可能既不是最大值也不是最小值
  6. 输出结果:使用 printf 函数按照题目要求的格式输出最大值和最小值。

算法优化点

这个算法已经非常简洁高效,对于只有三个数的情况,无法再进一步优化时间和空间复杂度。不过,如果处理的是任意数量的数据,我们可以使用更通用的方法,如:

  • 使用库函数 std::max()std::min()
  • 对于多个数的情况,可以使用循环或算法库中的 std::max_element()std::min_element()

总结

这道题目虽然简单,但它展示了解决最值问题的基本思路。在实际编程中,找最值是一个非常常见的操作,掌握这种基础算法对于解决更复杂的问题非常有帮助。

另外,本题也体现了程序设计中的一个重要思想:通过合理的初始化和条件判断,可以减少冗余操作,提高代码效率。

相关推荐
墨染点香12 小时前
LeetCode 刷题【128. 最长连续序列】
算法·leetcode·职场和发展
被AI抢饭碗的人12 小时前
算法题(240):最大食物链计数
算法
熬了夜的程序员12 小时前
【LeetCode】82. 删除排序链表中的重复元素 II
数据结构·算法·leetcode·链表·职场和发展·矩阵·深度优先
欧克小奥13 小时前
Floyd判圈算法(Floyd Cycle Detection Algorithm)
算法·floyd
熬了夜的程序员14 小时前
【LeetCode】83. 删除排序链表中的重复元素
算法·leetcode·链表
胖咕噜的稞达鸭14 小时前
AVL树手撕,超详细图文详解
c语言·开发语言·数据结构·c++·算法·visual studio
CSCN新手听安14 小时前
【linux】多线程(六)生产者消费者模型,queue模拟阻塞队列的生产消费模型
linux·运维·服务器·c++
-SGlow-14 小时前
Linux相关概念和易错知识点(48)(epoll的底层原理、epoll的工作模式、反应堆模式)
linux·服务器·c语言·网络·c++
熊猫钓鱼>_>14 小时前
Rust语言特性深度解析:所有权、生命周期与模式匹配之我见
算法·rust·软件开发·函数·模式匹配·异步编程·质量工具
csdn_aspnet14 小时前
C++ 圆台体积和表面积计算程序(Program for Volume and Surface area of Frustum of Cone)
c++