牛客竞赛题库(NC204457)

#include<stdio.h>

int main()
{
    int n;
    scanf("%d", &n);
    int num;
    int min = 100001;
    int max = -100001;
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &num);
        if (num > max)
        {
            max = num;
        }
        if (num < min)
        {
            min = num;
        }
    }
    printf("%d\n", max - min);
    return 0;
}

首先我们先看题目数字的上限,即10的5次方,则让变量初始化,min=100001,max=-100001。

为什么这么初始化?

因为我们要限定数字范围,任何输入的第一个数字必须要比100001小,也要比-100001大。

(当然我们无法保证接下来的数字不会超出范围,这是竞赛题库,通过就行了,要刻意追求完美,可以在中间加入这段代码验证数字是否超出上限:

在第12行下面添加:
if (num < -100000 || num > 100000)
{
   printf("错误!");
   return 1;
}

通过for循环逐个读取这些数字,更新极值,不断判断。

为什么用两个if,而不是if-else?

因为每个数字可能同时更新min或max,也可能不更新。

例如:

输入【5,3,8】,5会同时初始化min和max,3更新为min,8更新为max。

最后输出极差。

牛客竞赛题库(C语言) 文章被收录于专栏

这是我对题库写的代码以及分析,我会坚持把它写完,可能有些粗糙,专栏免费,不想看可以划走。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务