如何在 C++ 中打印剩余的一组数字?
How to print the remaining set of numbers in C++?
假设有一个集合 U = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10} 我创建了一个 C++ 程序并且我,使用一些逻辑打印数字 { 1, 3, 6, 7, 9}(我们称之为集合 A),所以剩下的数字是 {2, 4, 5, 8, 1}(暂且称之为集合 B)
和U = A + B
有没有直接打印出 B 组数字 (B = U - A) 的方法? (实际上并没有颠倒我打印 A 组数字的逻辑)
就像如果我打印偶数,那么剩下的就是奇数,我可以很容易地编写代码来显示奇数。但我想问是否有另一种“直接”的方式来做到这一点?
类似地,如果我打印 1-100 之间的所有质数,那么我可以反转逻辑并打印未打印的数字(此处为非质数),但我并不是要求这样做,我问有没有直接的方法来打印剩余的一组数字?
PS: 我只会基本的C++,我还没有开始DSA(数据结构和算法)仍然欢迎任何水平的答案,我会努力解释它:)
每当您听到“查找缺失元素”或“查找重复元素”类型的问题时,您应该立即想到“哈希 table”。在 Internet 上搜索 Hash Table,但 wikipedia article 具有基础知识。
std::unordered_map
和 std::unordered_set
是 C++ 中的集合 类,它们传统上基于散列 tables.
给定一个集合U:
unordered_set<int> U = { 1,2,3,4,5,6,7,8,9,10 };
作为 U 的子集的集合 A:
unordered_set<int> A = { 1,3,5,7,9 };
那么B = U - A
可以计算为
unordered_set<int> B;
for (int u : U) // for each item u in set U
{
if (A.find(u) == A.end()) // if u is not in "A"
{
B.insert(u); // add it to "B".
}
}
for (int b : B)
{
cout << b << endl;
}
如果您需要对输出进行排序,请将 B
的声明从 std::unordered_set
更改为 std::set
.
假设有一个集合 U = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10} 我创建了一个 C++ 程序并且我,使用一些逻辑打印数字 { 1, 3, 6, 7, 9}(我们称之为集合 A),所以剩下的数字是 {2, 4, 5, 8, 1}(暂且称之为集合 B)
和U = A + B
有没有直接打印出 B 组数字 (B = U - A) 的方法? (实际上并没有颠倒我打印 A 组数字的逻辑)
就像如果我打印偶数,那么剩下的就是奇数,我可以很容易地编写代码来显示奇数。但我想问是否有另一种“直接”的方式来做到这一点?
类似地,如果我打印 1-100 之间的所有质数,那么我可以反转逻辑并打印未打印的数字(此处为非质数),但我并不是要求这样做,我问有没有直接的方法来打印剩余的一组数字?
PS: 我只会基本的C++,我还没有开始DSA(数据结构和算法)仍然欢迎任何水平的答案,我会努力解释它:)
每当您听到“查找缺失元素”或“查找重复元素”类型的问题时,您应该立即想到“哈希 table”。在 Internet 上搜索 Hash Table,但 wikipedia article 具有基础知识。
std::unordered_map
和 std::unordered_set
是 C++ 中的集合 类,它们传统上基于散列 tables.
给定一个集合U:
unordered_set<int> U = { 1,2,3,4,5,6,7,8,9,10 };
作为 U 的子集的集合 A:
unordered_set<int> A = { 1,3,5,7,9 };
那么B = U - A
可以计算为
unordered_set<int> B;
for (int u : U) // for each item u in set U
{
if (A.find(u) == A.end()) // if u is not in "A"
{
B.insert(u); // add it to "B".
}
}
for (int b : B)
{
cout << b << endl;
}
如果您需要对输出进行排序,请将 B
的声明从 std::unordered_set
更改为 std::set
.