【问题标题】:Having trouble groking multiple exclusive combinations in C++在 C++ 中探索多个独占组合时遇到问题
【发布时间】:2012-06-18 20:10:21
【问题描述】:

我有一个有序的字符串需要呈现给用户:

ABCCDDCBBBCBBDDBCAAA

用'B'表示的对象被标记,这样2个Bs后面会有一个'~'。

AB~CCDDCB~BBCBBDDBCAAA
AB~CCDDCBB~BCBBDDBCAAA
AB~CCDDCBBB~CBBDDBCAAA
and so on...

我使用了 Howard Hinnant 的 combinations library,它适用于这个简单的案例。我的测试代码使用位置向量作为通过 for_each_combination 发送的整数。

但是,当我有多个 B 标记时,我不知道该怎么办。

例如,总共需要标记4B,2个'~'和2个'#'

AB~CCDDCB~B#B#CBBDDBCAAA
AB#CCDDCB~B~B#CBBDDBCAAA
AB~CCDDCB#B~B#CBBDDBCAAA
AB#CCDDCB#B~B~CBBDDBCAAA
ABCCDDCB~B~B#CB#BDDBCAAA
and so on...

我写出的伪代码是级联的。在第一个 for_each_combination 之后,对于每个结果组合,将每隔一个位置复制到另一个向量并执行另一个 for_each_combination。

考虑到我将使用的组合数量,我希望有更好的方法。

【问题讨论】:

    标签: c++ combinations data-partitioning


    【解决方案1】:

    这听起来像是家庭作业,所以首先我不会只给你代码,其次我添加了 [homework] 标签。

    现在,有四个标记要放置,一个合理的解决方案是一组嵌套的 for 循环,其中四个

    标记仅限于 7 个位置,因此只需从 0 到 6 计数,包括 0 到 6

    然后将其转换为字符串中的位置

    然后输出带有标记的字符串

    我已经验证这很简单

    如果您需要进一步的帮助,只需提出一个新问题(并展示您到目前为止所获得的信息)

    【讨论】:

    • 您好!信不信由你,这不是作业,而是工作!另外,我想我已经找到了一个合理的解决方案。我已经在下面详细说明了。
    【解决方案2】:

    我相信经过一番查看后,我已经回答了自己的问题。

    首先,我从使用 Howard 的库切换到 Hervé 的 combinations library。主要的吸引力是使用 next_combination 允许我将组合计算链接在一起,如下所示:

    do {
        do {
        cout << values << endl;
        } while (next_combination(values.begin() + 3, values.begin() + 5, values.end()));
    } while (next_combination(values.begin(), values.begin() + 3, values.end()));
    

    我需要将它按摩到一个迭代器中,但这正是我所需要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-20
      • 2019-12-29
      • 1970-01-01
      • 1970-01-01
      • 2013-08-06
      • 1970-01-01
      • 2021-10-13
      相关资源
      最近更新 更多