给定一个整数数组nums(可能存在正整数和负整数),在该数组中找出两个数,其和的绝对值(|nums[x] + nums[y]|)为最小值,并返回这两个数(从小到大)以及绝对值。
每种输入只会对应一个答案。数组中同一个元素不能使用两遍
输入:
输入数组nums,满足0 <= nums.length <= 1000, -65535 <= nums[i] < 65535
输出:
两数之和绝对值最小的两个数以及绝对值
样例输入:
-1 -3 7 5 11 15
样例输出:
-3 5 2
#include <stdio.h>
#include <stdlib.h>
unsigned int n, x;
unsigned int arr[1000] = {0};
int main()
{
unsigned int m, n;
unsigned int i = 0, j = 1;
unsigned int arr_size = 0;
unsigned int min = 0;
unsigned int tmp = 0;
while (1) {
scanf("%d", &arr[i++]);
arr_size++;
if (getchar() == '\n')
break;
}
i = 0;
while (i < arr_size) {
printf("arr[%d]:%d ", i, arr[i++]); // debug
}
printf("\n"); // debug
min = abs(arr[0] + arr[1]);
printf("min:%d, arr[0]:%d, arr[1]:%d\n", min, arr[0], arr[1]); // debug
i = 0;
for (m = 0; m < arr_size; m++) {
for (n = m + 1; n < arr_size; n++) {
tmp = abs(arr[m] + arr[n]);
if (tmp < min) {
i = m;
j = n;
min = tmp;
printf("min:%d, arr[%d]:%d, arr[%d]:%d\n", min, m, arr[m], n, arr[n]); // debug
} else {
printf("未找到更小的和的绝对值min:%d, arr[%d]:%d, arr[%d]:%d\n", min, m, arr[m], n, arr[n]); // debug
}
}
}
printf("arr[%d]:%d, arr[%d]:%d, min:%d\n", i, arr[i], j, arr[j], min); // debug
return 0;
}