题目描述
给定一个随机的整数(可能存在正整数和负整数)数组 nums,请你在该数组中找出两个
数,其和的绝对值(|nums[x]+nums[y]|)为最小值,并返回这个两个数 (按从小到大返回)以及
绝对值。
每种输入只会对应一个答案
但是,数组中同一个元素不能使用两遍
输入描述
个通过空格分割的有序整数席列字符串,最多 1000 个整数,目整数数值范围是
[-65535,65535].
输出描述
两数之和绝对值最小值
用例
一、问题分析
首先读题,仔细看描述中的内容,发现需求是
1.给定一个随机的整数数组可能存在正整数和负整数
2.找出数组中两个和的绝对值最小的数字
3.返回这两个数字(从小到大返回)以及绝对值
4.输入描述:一个通过空格分割的有序整数字符串,最多1000个整数,且整数数值范围是[-65535,65535]
5.输出描述:两数之和绝对值最小值
二、解题思路
1.首先定义一个数组int nums[1000];用来接收数据
2.定义一个最小值int min = 65535 * 2;用来记录绝对值最小值,定义两个整数int a, b;用于返回
3.然后将数组每两个数字的和计算一遍,计算完和之后
4.查看这个数字的正负,如果是负数那么乘以-1(取绝对值)
5.然后如果比min小那么min变成这个数字,a变成比较小的数字,b变成比较大的数字
三、具体步骤
使用的语言是C
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main() {int nums[1000];int index = 0;while(scanf("%d", &nums[index++]) != EOF) {// printf("%d\n", nums[index - 1]);}index--;int a, b, min = 65535 * 2;for(int i = 0; i < index; i++) {for(int j = 0; j < index; j++) {if(i == j) continue;int temp = nums[i] + nums[j];// printf("temp[%d] + temp[%d] = %d\n", i, j,temp);if(temp < 0) temp *= (-1);if(temp < min) {min = temp;if(nums[i] < nums[j]) {a = nums[i];b = nums[j];} else {a = nums[j];b = nums[i];}}}}printf("%d %d %d\n", a, b, min);return 0;
}