[CSP] 201712-1 最小差值
题目 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
#include int cmp(const void *a, const void *b) { //qsort比较函数return (*(int *) a - *(int *) b);
}int main() {int n, i, min = 10001; //根据约定,两数彼此相差不会超过1e4scanf("%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
#include using namespace std;int main() {int n, min = 10001; //根据约定,两数彼此相差不会超过1e4cin >> 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;
}
时间使用:0ms 空间使用:2.957MB
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
