牛客竞赛题库(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语言) 文章被收录于专栏
这是我对题库写的代码以及分析,由易到难,我会坚持把它写完,可能有些粗糙,专栏免费,不想看可以划走。

阿里云成长空间 763人发布