C++: 查找30个数字中缺失的两个数(支持一次性输入)

本篇文章提供了一个C++程序,用于查找30个数字(1-30)中缺失的两个数。程序允许用户一次性输入所有28个已知数字,并使用逗号进行分隔。

**代码:**c++#include #include #include #include <unordered_set>

std::vector findMissingNumbers(const std::vector& arr) { std::vector missingNumbers; if (arr.size() != 28) { missingNumbers.push_back(-1); return missingNumbers; } std::unordered_set distinctNumbers; for (int num : arr) { if (num < 1 || num > 30 || distinctNumbers.count(num) > 0) { missingNumbers.push_back(-1); return missingNumbers; } distinctNumbers.insert(num); } for (int i = 1; i <= 30; i++) { if (distinctNumbers.count(i) == 0) { missingNumbers.push_back(i); if (missingNumbers.size() == 2) { return missingNumbers; } } } return missingNumbers;}

int main() { std::cout << '请输入28个不重复的整数(取值范围为1到30,使用逗号分隔):' << std::endl; std::string input; std::getline(std::cin, input); std::vector arr; std::stringstream ss(input); std::string token;

while (std::getline(ss, token, ',')) {        arr.push_back(std::stoi(token));    }

std::vector<int> missingNumbers = findMissingNumbers(arr);

if (missingNumbers[0] == -1) {        std::cout << '数组大小不对或存在重复元素' << std::endl;    } else {        std::cout << '丢失的两个数字是: ' << missingNumbers[0] << ' 和 ' << missingNumbers[1] << std::endl;    }

return 0;}

代码解释:

  1. findMissingNumbers 函数: - 接收一个包含28个数字的整型数组作为参数。 - 检查数组大小是否为28,如果不是,则返回 -1 表示输入错误。 - 使用 unordered_set 存储数组元素,用于快速查找重复元素。 - 遍历数组,检查每个元素是否在有效范围内 (1-30) 以及是否已经存在于集合中。如果发现错误,则返回 -1。 - 遍历 1-30 的所有数字,查找不在集合中的数字,并将它们添加到 missingNumbers 向量中。 - 当找到两个缺失的数字时,返回 missingNumbers 向量。

  2. main 函数: - 提示用户输入28个数字,以逗号分隔。 - 使用 stringstreamgetline 函数将输入字符串解析为整数数组。 - 调用 findMissingNumbers 函数查找缺失的数字。 - 根据函数返回值,输出找到的缺失数字或者错误信息。

特点:

  • 用户友好: 允许用户一次性输入所有数字,提高了输入效率。- 输入验证: 检查数组大小和重复元素,确保输入数据的有效性。- 高效: 使用 unordered_set 提高查找效率。
C++: 查找30个数字中缺失的两个数(支持一次性输入)

原文地址: https://www.cveoy.top/t/topic/cnmw 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录