试题编号:201712-1
试题名称:最小差值
时间限制:1.0s
内存限制:256.0MB
问题描述:
给定n个数,请找出其中相差(差的绝对值)最小的两个数,输出它们的差值的绝对值。
输入格式 : 输入第一行包含一个整数n。
第二行包含n个正整数,相邻整数之间使用一个空格分隔。
输出格式 :
输出一个整数,表示答案。
样例输入 :5
1 5 4 8 20
样例输出 : 1
样例说明
相差最小的两个数是5和4,它们之间的差值是1。
样例输入 : 5
9 3 6 1 3
样例输出: 0
样例说明
有两个相同的数3,它们之间的差值是0.
数据规模和约定 : 对于所有评测用例,2 ≤ n ≤ 1000,每个给定的整数都是不超过10000的正整数。
分析 :
就是求一串数的最小差值,样例说明讲的很清楚
例如: 6 4 2 8 5 1
求最小值:(伪代码)
for(i=0,min=99999;i<6;i++)
{
if(a[i]<min) min=a[i];
}
求最小差值:(伪代码)
//因为要用到取绝对值fabs,头文件需要加 #include <cmath>
for(i=0,min=99999;i<5;i++)
{
for(j=i+1;j<6;j++) //让每个数与它后面的每一个数取差值 的绝对值与最小值比较(解释i<5:所以只要到倒数第二个和最后一个数的差值比较循环就结束)
{
if(fabs(a[i]-a[j])<min) min=fabs(a[i]-a[j]); //如果差值 的绝对值比最小值还小,那么令最小值min=此差值的绝对值
}
}
代码:
#include <iostream>
#include <cmath> //因为要用到取绝对值fabs,头文件需要加 #include <cmath>
using namespace std;
int main()
{
int i,j,n,min;
cin>>n;
int a[n];
for(i=0;i<n;i++)
{
cin>>a[i];
}
for(i=0,min=10000;i<n-1;i++)
{
for(j=i+1;j<n;j++) //让每个数与它后面的每一个数取差值 的绝对值与最小值比较
{
if(fabs(a[i]-a[j])<min) min=fabs(a[i]-a[j]); /如果差值 的绝对值比最小值还小,那么令最小值min=此差值的绝对值
}
}
cout<<min<<endl;
return 0;
}