思路:排个序,然后找到最小的和最大的之间的和最小绝对值的数值就好,注意溢出
代码:
#include <iostream> #include <algorithm> #define max 100005 #define ll long long using namespace std; ll a[max]; ll ab(ll a){ if(a>=0)return a; else return -a; } int main() { int n; while(cin>>n){ for(ll i = 0;i < n;i++){ cin>>a[i]; } sort(a,a+n);///对整个数组进行着一个排序 ll ans = 0,index = 0; for(ll i = 0;i < n;i++){ if(ab(a[i]-0)<ab(a[index]-0))index = i; } ans = ab(2 * a[index]); for(ll i = 0;i <= index;i++){ for(ll j = n-1;j >= index;j--){ if(abs(a[i]+a[j])<ans)ans = ab(a[i]+a[j]); } } cout<<ans<<endl; } return 0; }