【问题标题】:Given a positive integer N as input, how do I find the product of the numbers in their subsets?给定一个正整数 N 作为输入,我如何找到它们子集中的数字的乘积?
【发布时间】:2016-06-06 10:08:53
【问题描述】:

如果 N=405,我如何生成它的所有子集,然后找到每个子集数字的乘积?就像在这种情况下,集合将是 {0,4,5,40,05,45,405} 他们的产品会产生一组{0,4,5,0,0,20,0}?

编辑:它是多组非空子序列。

【问题讨论】:

  • 首先,您尝试了什么?你是如何提出子集的?为什么没有{40}
  • 呃,你能详细说明一下吗?为什么最后一组包含20 == 04 * 05,但没有180 == 04 * 45
  • 我们使用 set 还是 multiset?例如。如果是 multiset 122 -> {1, 2, 2, 12, 22, 122} -> {..., 4 == 2 * 2, ...} 而如果是 set 122 -> {1, 2, 12, 22, 122} 则答案中没有 4

标签: c++ algorithm set subset powerset


【解决方案1】:

检查此site,它将为您提供获取给定集合的功率集合的逻辑。 一旦你得到幂集元素,乘以集合中的每个元素,就可以得到你需要的乘积。

【讨论】:

    【解决方案2】:

    嗯,有一个非常简单和天真的递归解决方案来检索所有子集。

    你从你的集合中取出一个元素,然后找到这个新的、更小的集合的所有子集。然后复制结果并将之前删除的元素添加到副本中。将结果加在一起就完成了。例如:

    {1,2,3}
    
    Take out 1 and find all subsets of {2,3} giving you:
    {{}, {2}, {3}, {2,3}}
    
    Now copy this to give you
    A = {{}, {2}, {3}, {2,3}}
    B = {{}, {2}, {3}, {2,3}}
    
    Now add 1 to each set in A, giving you
    {{1}, {1,2}, {1,3}, {1,2,3}}
    
    combine it with B
    {{1}, {1,2}, {1,3}, {1,2,3}, {}, {2}, {3}, {2,3}}
    

    这里有一些代码:

    function subsets(aSet) {
        if (aSet.isEmpty()) {
            return [theEmptySet]
        }
    
        let lastElement = aSet.getLast()
        let aSmallerSet = aSet.removeLast()
    
        let subsetsOfSmallerSet = subsets(aSmallerSet)
        let subsetsContainingLastElement = subsetsOfSmallerSet.map(set => set.insert(lastElement))
    
        return subsetsOfSmallerSet.concat(subsetsContainingLastElement)
    }
    

    我假设您的意思是获取给定数字的所有数字子集。因此,假设您已将数字拆分并将它们解析回数字,那么您可以使用 reduce 来获取产品。

    let digits = //... an array such as [4,0,5]
    let subsetsOfDigits = subsets(digits)
    subsetsOfDigits.map(subset => subset.reduce((a,b) => a * b))
    

    啊,但是这里你有一个空集的问题,因为你没有传递一个初始值来减少。但是,您似乎忽略了示例中的空集,因此您可以将其过滤掉,然后这段代码就可以工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-25
      • 2017-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多