乱序整数序列两数之和绝对值最小
标题:乱序整数序列两数之和绝对值最小 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限
给定一个随机的整数(可能存在正整数和负整数)数组 nums ,请你在该数组中找出两个数,其和的绝对值(|nums[x]+nums[y]|)为最小值,并返回这个两个数(按从小到大返回)以及绝对值。
每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
while True: try: num_list = sorted(list(map(int, input().split()))) min_num, max_num = 0, 0 res = 132000 for i in range(len(num_list)): j = i + 1 while j < len(num_list): abs_num = abs(num_list[i] + num_list[j]) if abs_num < res: res, min_num, max_num = abs_num, num_list[i], num_list[j] j += 1 print(min_num, max_num, res) except: break
#include <stdio.h>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int arr[1001]={0};
int sum=0;
while(cin>>arr[sum]) sum++;
sort(arr,arr+sum);
int left=0,right=sum-1;
int min=65535 * 2;
int result=0;
int outleft,outright;
while(left<right) {
result=arr[left]+arr[right];
if(abs(result)<min) {
outleft=left;
outright=right;
min=abs(result);
}
if(result>0) right--;
else left++;
}
cout << arr[outleft] << ' ' << arr[outright] << ' ' << min;
return 0;
} // manfen
#include <iostream>
using namespace std;
int main() {
int num[1000];
int top = 0, n;
while (cin >> n) {
num[top++] = n;
}
int min = -1, x, y, ans_x, ans_y;
for (int i=0;i<top-1;i++) {
for (int j=i+1;j<top;j++) {
if (num[i] < num[j]) {
x = num[i];
y = num[j];
}
else {
x = num[j];
y = num[i];
}
if (min == -1) {
min = x+y > 0 ? x+y : -x-y;
ans_x = x;
ans_y = y;
}
else {
int temp = x+y > 0 ? x+y : -x-y;
if (temp < min) {
min = temp;
ans_x = x;
ans_y = y;
}
}
}
}
cout << ans_x << " " << ans_y << " " << min << endl;
return 0;
}
