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