题目描述
最近,小L遇到了一道难题,请你帮帮他。
给出n个数,请找出这个序列的任意两个不同的数第二小的差值。ai和 aj的差值定义为∣ai−aj∣,即两个数差的绝对值,其中i和j互不相同。(第二小即从小到大排序之后的第二个数字)
输入格式
第一行为一个正整数n (3≤n≤105),代表数组的长度。
接下来一行,共n个整数ai(−109≤ai≤109)。
输出格式
输出一个数字,表示这个序列的任意两个不同的数中第二小的差值。
样例1
样例输入
6
11 4 7 1 16 2
样例输出
2
样例2
样例输入
6
10 1 2 4 15 6
样例输出
2
样例3
样例输入
6
6 8 10 4 3 2
样例输出
1
参考:
#include<stdio.h>
int main()
{
int n;
int i,j,k;
int a[106],b[10000];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<n;i++)//给输入的a数组由小到大排序
{
for(j=i+1;j<n;j++)
{
if(a[i]>a[j])
{
k=a[i];
a[i]=a[j];
a[j]=k;
}
}
}
for(i=1;i<n;i++)//a数组相邻的项相减得b数组
{
if(a[i]>a[i-1])
b[i]=a[i]-a[i-1];
if(a[i]<a[i-1])
b[i]=a[i-1]-a[i];
}
for(i=1;i<n;i++)//给输出的b数组由小到大排序
{
for(j=i+1;j<n;j++)
{
if(b[i]>b[j])
{
k=b[i];
b[i]=b[j];
b[j]=k;
}
}
}
printf("%d",b[2]);
return 0;
}
如果有帮助到大家,请大家点个赞哦~
谢谢~