【发布时间】:2020-06-28 15:16:31
【问题描述】:
我了解如何通过手工解决问题,但我想创建一个 Javascript 程序来为 (c,r) 完成此操作,其中 c 是容器,r 是岩石。
设置 您有 4 块相同类型的无法区分的岩石。您还有 10 个容器。每个容器可以容纳 0 块石头或 1 块石头。每次排列都需要使用所有 4 块石头,每次排列留下 6 个 0。
我相信基于组合生成器应该有大约 210 种可能性 (10!)/ (4! * (10-4)!)。
例如,这些是可能性的示例:
1111000000
1110100000
1110001000
0000001111
0101010100
我正在寻找的是一个 javascript 函数,它将吐出 210 个数组,使得它是 [1,1,1,1,0,0,0,0,0,0] 并输入一些岩石和容器。
【问题讨论】:
-
基本上,您正在寻找 0 - 1023 ( 2 ^ 10 个数字 - 1 ) 中设置了 4 位的所有二进制数。快速而肮脏的方法是从 0 循环到 1023,将此数字转换为二进制(即
toString(2))并计算 1 的数量。如果有四个 1,则保留结果,否则继续下一个数字。 -
@JonTrent 我根据您的想法发布了一个答案,我觉得这太棒了。如果您想自己发布此答案作为答案,请这样做!这是你的主意
-
@blex,全是你!你做了繁重的工作。另外,您将 1 拆分以计算 1 的方法是一种巧妙的方法。
标签: javascript node.js algorithm math combinatorics