乱序整数序列两数之和绝对值最小

标题:乱序整数序列两数之和绝对值最小 | 时间限制: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;
}


全部评论

相关推荐

程序员花海_:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务