题目
问题描述
给定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的正整数。
思路分析
1.先将输入的n个正整数进行排序,以下代码采用的是简单选择排序算法,从小到大排序。
2.遍历排序后的数组,找出最小的差值并输出即可。
C语言实现的源代码(100分)
#include <stdio.h>
#define N 1000
void SelectSort(int array[],int n) //简单选择排序
{
int i,j,temp,min,min_pos;
for(i=0;i<n-1;i++)
{
min = array[i];
min_pos = i;
for(j=i;j<n;j++)
{
if(min > array[j])
{
min = array[j];
min_pos = j;
}
}
if(min_pos != i)
{
temp = array[i];
array[i] = array[min_pos];
array[min_pos] = temp;
}
}
}
int main()
{
int i,n,array[N],dlta;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&array[i]);
SelectSort(array,n); //将数组array进行选择排序
dlta = array[1] - array[0]; //dlta表示两个数的差值
for(i=2;i<n;i++)
{
if(dlta > array[i] - array[i-1]) //由于按从小到大排序,无需绝对值
dlta = array[i] - array[i-1]; //找到最小的差值
}
printf("%d",dlta);
return 0;
}
使用C++ sort函数的源代码
#include <stdio.h>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n, i, number[1000], dlta = 10000;
scanf("%d", &n);
for(i = 0; i < n; i++)
scanf("%d", &number[i]);
sort(number, number + n);
for(i = 1; i < n; i++)
{
if(dlta > number[i] - number[i - 1])
dlta = number[i] - number[i - 1];
}
printf("%d", dlta);
return 0;
}