0

我如何编写一个有两个参数的函数,它应该生成任意范围位的组合,例如: function(n,k) n=range, k=number of 1 digits. if i give 4 and 2 to function input: function(4,2)

 output:1100,1010,1001,0110,0011,0101 
4

2 回答 2

1

这为您提供了一个随机数字列表:

rands[n_, k_] := Module[{out},
      out = Table[0, {n}];
      out[[RandomSample[Range[n], k]]] = 1;
      out]
rands[4, 2]

(* {1, 1, 0, 0} *)

不确定您想要什么输出形式,但您可能会使用 FromDigits。

编辑一个更干净的方法..

rands[n_, k_] := Table[0, {n - k}]~Join~Table[1, {k}] // RandomSample

编辑:根据您的评论,我猜您想要的是排列:(我想我将“任意”表示为随机......)

 p[n_, k_]  :=  Permutations[Table[0, {n - k}]~Join~Table[1, {k}], {n}]

(*
{{0, 0, 1, 1}, {0, 1, 0, 1}, {0, 1, 1, 0}, {1, 0, 0, 1}, {1, 0, 1, 0}, {1, 1, 0, 0}} *)

于 2013-09-13T17:30:39.517 回答
0
function[n_, k_] := Permutations[PadRight[ConstantArray[1, k], n]]

In[72]:= function[4, 2]
Out[72]= {{1, 1, 0, 0}, {1, 0, 1, 0}, {1, 0, 0, 1}, {0, 1, 1, 0}, {0, 1, 0, 1}, {0, 0, 1, 1}}

In[73]:= function[3, 1]
Out[73]= {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}
于 2013-09-14T17:44:07.387 回答