C语言,输入一个数组,不保证不包含重复数字,要求判断能否找到两个数对,使得a+b=c+d,要求数字不能重复,如果能找到返回true
时间: 2024-01-04 21:04:47 浏览: 97
数组中重复的数字(C语言/C++)
好的,可以使用哈希表来解决。下面是C语言的实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
bool findPairs(int* nums, int numsSize) {
if (!nums || numsSize <= 0) {
return false;
}
int i, j;
int pair_sum;
int* pair_dict = (int*)malloc(sizeof(int) * numsSize * numsSize);
memset(pair_dict, 0, sizeof(int) * numsSize * numsSize);
for (i = 0; i < numsSize; i++) {
for (j = i + 1; j < numsSize; j++) {
pair_sum = nums[i] + nums[j];
if (pair_dict[pair_sum] == 0) {
pair_dict[pair_sum] = nums[i] * 1000 + nums[j];
} else {
int a = pair_dict[pair_sum] / 1000;
int b = pair_dict[pair_sum] % 1000;
if (a != nums[i] && a != nums[j] && b != nums[i] && b != nums[j]) {
return true;
}
}
}
}
free(pair_dict);
return false;
}
int main() {
int nums[] = {1, 2, 3, 4, 5};
int numsSize = sizeof(nums) / sizeof(nums[0]);
bool res = findPairs(nums, numsSize);
printf("%s\n", res ? "true" : "false");
return 0;
}
```
在这里,我们使用了一个一维数组来模拟哈希表,数组的下标代表数字对的和,数组的值代表数字对。如果某个数字对的和在哈希表中不存在,则将该数字对存入哈希表中;否则,判断哈希表中存储的数字对是否与当前数字对满足条件,如果满足条件,则返回true。注意,在存储数字对时,我们将两个数字合并成一个整数来存储,这样可以避免重复数字对的问题。
阅读全文