题目 201712-1
试题名称:最小差值
时间限制:1.0s
内存限制:256.0MB
问题描述:
给定n个数,请找出其中相差(差的绝对值)最小的两个数,输出它们的差值的绝对值。
输入格式
输入第一行包含一个整数n。
第二行包含n个正整数,相邻整数之间使用一个空格分隔。
输出格式
输出一个整数,表示答案。
样例1输入
5
1 5 4 8 20
样例1输出
1
样例说明
相差最小的两个数是5和4,它们之间的差值是1。
样例2输入
5
9 3 6 1 3
样例2输出
0
样例说明
有两个相同的数3,它们之间的差值是0。
数据规模和约定
对于所有评测用例,2 ≤ n ≤ 1000,每个给定的整数都是不超过10000的正整数。
解题报告
思路
数据量很小,2 ≤ n ≤ 1000,可以直接存下全部数据,排序后遍历所有数据找出最小差值。
AC代码
C
#include <stdio.h>
#include <stdlib.h>
int cmp(const void *a, const void *b) { //qsort比较函数
return (*(int *) a - *(int *) b);
}
int main() {
int n, i, min = 10001; //根据约定,两数彼此相差不会超过1e4
scanf("%d", &n);
int a[n];
for (i = 0; i < n; i++) scanf("%d", &a[i]); //i若在for内定义,CSP的OJ会判编译错误(CE)
qsort(a, n, sizeof(a[0]), cmp); //从小到大排序
for (i = 0; i < n - 1; i++) { //如果此处以i < n作为循环条件,后面的a[n+1]会造成数组越界
if (a[i + 1] - a[i] < min) min = a[i + 1] - a[i];
if (min == 0) break;
}
printf("%d", min);
return 0;
}
时间使用:15ms
空间使用:2.675MB
C++
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n, min = 10001; //根据约定,两数彼此相差不会超过1e4
cin >> n;
int a[n];
for (int i = 0; i < n; i++) cin >> a[i];
sort(a, a + n); //从小到大排序
for (int i = 0; i < n - 1; i++) { //如果此处以i < n作为循环条件,后面的a[n+1]会造成数组越界
if (a[i + 1] - a[i] < min) min = a[i + 1] - a[i];
if (min == 0) break;
}
cout << min;
return 0;
}