如何在C++中打印剩余的一组数字?

问题描述 投票:0回答:2

假设有一个集合 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(数据结构和算法),仍然欢迎任何水平的答案,我会努力解释它:)

c++ algorithm sorting math arraylist
2个回答
1
投票

每当您听到“查找丢失的元素”或“查找重复的元素”类型的问题时,您应该立即想到“哈希表”。在互联网上搜索哈希表,但维基百科文章有基础知识。

std::unordered_map
std::unordered_set
是 C++ 中的集合类,传统上基于哈希表。

给定一组 U:

unordered_set<int> U = { 1,2,3,4,5,6,7,8,9,10 };

集合 A 是 U 的子集:

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


0
投票

wps huine kazkokia nesuprantu karocia

© www.soinside.com 2019 - 2024. All rights reserved.