【问题标题】:How to print the remaining set of numbers in C++?如何在 C++ 中打印剩余的一组数字?
【发布时间】:2022-01-08 19:05:07
【问题描述】:

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

【问题讨论】:

  • @Evg 先生,我不太明白那篇参考文章,我是初学者。
  • 在您的示例中,U 对应于自然数的有序列表:1 2 3 4 ... n-1 n。是不是总是这样。如果是,则存在更简单的方法。
  • @Damien 不,这只是一个例子,让我更清楚我在问什么。我只想打印剩余的一组数字,如果我之前打印过素数(不颠倒逻辑),就像非素数一样

标签: c++ algorithm sorting math arraylist


【解决方案1】:

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

std::unordered_mapstd::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

【讨论】:

  • 非常感谢先生,它成功了 :)' @shelby
  • @shelby 需要哪些头文件?
  • #include &lt;unodered_set&gt;#include &lt;set&gt;
猜你喜欢
  • 2015-12-14
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 2017-11-29
  • 1970-01-01
  • 2010-11-21
  • 1970-01-01
  • 2012-01-03
相关资源
最近更新 更多