资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
数轴上有n个数字,求最近的两个数,即min(abs(x-y))
输入格式
第一行包含一个整数n。
接下来一行,表示n整数。
输出格式
一个整数表示最小距离
样例输入
6
7 3 4 11 9 17
样例输出
1
样例说明
取3和4
数据规模和约定
n<=100000
所有整数<=10^7
解答部分
代码部分:
#include<stdio.h>
#include<math.h>
int main()
{
int i,n,arr[100000];//数据规模与约定:100000
int A,B;
scanf("%d",&n);//输入一个值
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);//输入几个数据
}
A=arr[1]-arr[0];//存储一个最小值
for(i=0;i<n;i++)
{
int s1=abs(arr[i]-arr[i+1]);//做差取绝对值
int s2=abs(A);//取绝对值
A=(s1>s2)?s2:s1;
}
printf("%d",A);
return 0;
}
A=(s1>s2)?s2:s1;
如果任意两个相邻的数相减的绝对值的值 abs(arr[i]-arr[i][i+1])<存储的一个最小值的绝对值的值abs(arr[1]-arr[0]),是真的,就选择S2,否则就选择s1
最终的结果都是将最小的那个输出。
为啥要用arr[1]-arr[0]?用arr[2]-arr[1]不行吗,或者arr[3]-arr[2].........
当然可以,你用这些在蓝桥杯练习系统上面测试也可以测试出来,但是随着数据的越来越大,
分值就会越低,如下:
用arr[1]-arr[0]:
用arr[26]-arr[25]:
用arr[51]-arr[50]:
所以要尽量往小了的写,分才会更高。