用c++完整 输入一个整形数组 (不含重复数字),然后输入一个任意数字N。如果数组里存在两个整数和为N的数,则返回这两个整数的下标[X, Y] (X为第一个整数下标, Y为第二个整数下标) 不存在则返回[[-1,-1]。
时间: 2024-10-08 09:24:50 浏览: 30
详解C++中的一维数组和二维数组
5星 · 资源好评率100%
在 C++ 中,你可以通过以下步骤来实现这个功能:
首先,你需要创建一个函数 `find_pairs` 来处理这个问题。这个函数接受一个整型数组和一个目标值 N 作为参数。为了保持时间效率,我们可以使用哈希表(如 `std::unordered_map`),将数组元素及其索引存储起来,以便快速查找。
```cpp
#include <iostream>
#include <vector>
#include <unordered_map>
std::pair<int, int> find_pairs(const std::vector<int>& nums, int target) {
std::unordered_map<int, int> map;
for (size_t i = 0; i < nums.size(); ++i) {
if (map.find(target - nums[i]) != map.end()) {
return {map[target - nums[i]], i};
}
map[nums[i]] = i;
}
return {-1, -1}; // 如果找不到符合条件的数对,返回{-1, -1}
}
int main() {
std::vector<int> nums;
std::cout << "Enter the integers in the array separated by space (no duplicates): ";
// 接收用户输入并保存到 nums 中,这里假设用户输入的是正确的
for (int num; std::cin >> num && num != 0; ) {
nums.push_back(num);
}
int N;
std::cout << "Enter a number N: ";
std::cin >> N;
auto result = find_pairs(nums, N);
if (result.first == -1 && result.second == -1) {
std::cout << "No pair found with sum equal to " << N << "." << std::endl;
} else {
std::cout << "Pair found at indices [" << result.first << ", " << result.second << "]" << std::endl;
}
return 0;
}
```
在这个程序中,用户首先输入一个无重复整数的数组,然后输入一个目标值 N。`find_pairs` 函数遍历数组,对于每个元素,检查是否存在目标值减去它的对应元素在哈希表中的值,如果有,就找到了一对满足条件的数,并返回它们的下标。如果没有找到,最后返回 `-1, -1`。
阅读全文