【问题标题】:Find combinations of elements of size bigger than the number of elements查找大小大于元素数量的元素组合
【发布时间】:2020-03-22 23:56:39
【问题描述】:

例如,我有一个保险箱,需要一个长度为 5 (XXXXX) 的数字的答案,但您只使用 1、2、3。所以一些组合可能是 1,2,3 & 1,1,1 & 1,1,2 等等......但我需要找到所有的可能性。

我已经集思广益,我认为我需要找到三个数字的所有组合的所有排列,但我不知道如何找到大小 5 的答案。

如果它只有三个数字并且答案是长度 3,我可以只使用置换函数,但这不起作用,因为我需要它比使用的元素更大。

【问题讨论】:

  • 在建号之前,能不能先建一个条件相同的长度为5的列表

标签: prolog combinations permutation list


【解决方案1】:

没问题!

?- 使用模块(库(clpfd))。 真的。 ?- 长度(Zs,5),Zs ins 1..3,标签([],Zs)。 Zs = [1, 1, 1, 1, 1] ; Zs = [1, 1, 1, 1, 2] ; Zs = [1, 1, 1, 1, 3] ; Zs = [1, 1, 1, 2, 1] ; Zs = [1, 1, 1, 2, 2] ; Zs = [1, 1, 1, 2, 3] ; Zs = [1, 1, 1, 3, 1] ; Zs = [1, 1, 1, 3, 2] ; Zs = [1, 1, 1, 3, 3] ; Zs = [1, 1, 2, 1, 1] ...

【讨论】:

    【解决方案2】:

    没问题,使用:

    rebmem(L,Y) :- member(Y,L).
    
    ?- length(Zs,5), maplist(rebmem([1,2,3]),Zs).
    Zs = [1, 1, 1, 1, 1] ;
    Zs = [1, 1, 1, 1, 2] ;
    Zs = [1, 1, 1, 1, 3] ;
    Zs = [1, 1, 1, 2, 1] ;
    Zs = [1, 1, 1, 2, 2] ;
    Zs = [1, 1, 1, 2, 3] ;
    Zs = [1, 1, 1, 3, 1] ;
    Zs = [1, 1, 1, 3, 2] ;
    Zs = [1, 1, 1, 3, 3] ;
    Zs = [1, 1, 2, 1, 1] 
    

    【讨论】:

      猜你喜欢
      • 2015-08-22
      • 1970-01-01
      • 1970-01-01
      • 2013-12-15
      • 1970-01-01
      • 2015-03-11
      • 2014-07-21
      • 2017-01-17
      • 2021-12-27
      相关资源
      最近更新 更多