找出数组中和为目标值的两个数,并用C++代码实现 要求为:输入:多组数据,每组数据有三行,第一行为数组的大小n,第二行为n个元素(元素之间用空格分隔),第三行为目标值,当n=0时输入结束。输出:对于每组数据分别输出一样,输出两个数的下标(元素间用空格分隔)
时间: 2024-02-29 20:51:38 浏览: 200
好的,以下是使用 C++ 实现的代码:
```cpp
#include <iostream>
#include <unordered_map>
#include <vector>
using namespace std;
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> hash_table;
for (int i = 0; i < nums.size(); i++) {
int delta = target - nums[i];
if (hash_table.count(delta)) {
return {hash_table[delta], i};
}
hash_table[nums[i]] = i;
}
return {};
}
int main() {
int n;
while (cin >> n && n) {
vector<int> nums(n);
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
int target;
cin >> target;
vector<int> result = twoSum(nums, target);
if (!result.empty()) {
cout << result[0] << " " << result[1] << endl;
}
}
return 0;
}
```
该代码使用了 while 循环来读取多组数据,每次读入一个 n 值表示数组的大小,接着读入 n 个元素和目标值 target。然后调用了名为 twoSum 的函数,该函数使用了 unordered_map 来实现哈希表,并返回了满足条件的两个数的下标。最后在主函数中输出了结果。注意,在输入结束时,需要通过 n 的值判断是否继续读取下一组数据。
阅读全文