按从小到大的顺序输入n个整数,再输入一个给定的整数x,在这n个数中找两数之和等于x的数对(可能有多个),找到则输出这两个数,没找到输出“no”,请用C++给出代码示例
时间: 2024-05-06 17:18:43 浏览: 98
以下是基于哈希表实现的 C++ 代码示例:
```c++
#include <iostream>
#include <unordered_map>
using namespace std;
void findPairs(int arr[], int n, int x) {
unordered_map<int, int> mp;
for (int i = 0; i < n; i++) {
if (mp.find(x - arr[i]) != mp.end()) {
cout << arr[i] << " " << x - arr[i] << endl;
return;
}
mp[arr[i]] = i;
}
cout << "no" << endl;
}
int main() {
int n, x;
cin >> n;
int arr[n];
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
cin >> x;
findPairs(arr, n, x);
return 0;
}
```
该代码首先使用 unordered_map 构建哈希表,遍历数组,将每个数值作为键,下标作为值插入哈希表中。同时,每次遍历时,检查哈希表中是否存在与当前数值相加等于目标值 x 的键,若存在则输出两数之和等于 x 的数对,退出函数。若遍历完数组后仍未找到符合要求的数对,则输出 "no"。
阅读全文