我的英语不好,所以如果我描述的内容对你来说不清楚,请原谅我。
我想用 0
创建二维数组和 1
当我输入 n
,它应该创建:Array01(1 to 2^n as long, n as long)
, 和 0
和 1
是这样的组合:
n = 1 ==> Arr (2 rows x 1 column)
0 |
1 |
n = 2 ==> Arr (4 rows x 2 columns)
0 0 |
0 1 |
1 0 |
1 1 |
n = 3 ==> Array (8 rows x 3 columns)
0 0 0 |
0 0 1 |
0 1 0 |
1 0 0 |
1 1 0 |
1 0 1 |
0 1 1 |
1 1 1 |
最佳答案
您可以使用如下功能
Option Explicit
Public Function CreateMatrix(ByVal n As Long) As Variant
Dim Matrix() As Long
ReDim Matrix(1 To 2 ^ n, 1 To n)
Dim i As Long
For i = 0 To 2 ^ n - 1
Dim BinaryString As String
BinaryString = DecToBin(i, n)
Dim c As Long
For c = 1 To n
Matrix(i + 1, c) = CLng(Mid$(BinaryString, c, 1))
Next c
Next i
CreateMatrix = Matrix
End Function
Public Function DecToBin(ByVal DecimalIn As Variant, Optional ByVal NumberOfBits As Variant) As String
Dim Result As String
DecimalIn = CDec(DecimalIn)
Do While DecimalIn <> 0
Result = Trim$(Str$(DecimalIn - 2 * Int(DecimalIn / 2))) & Result
DecimalIn = Int(DecimalIn / 2)
Loop
If Not IsMissing(NumberOfBits) Then
If Len(Result) > NumberOfBits Then
Result = "Error - Number too large for bit size"
Else
Result = Right$(String$(NumberOfBits, "0") & Result, NumberOfBits)
End If
End If
DecToBin = Result
End Function
并称它为' generate the matrix
Dim MyMatrix() As Long
MyMatrix = CreateMatrix(n:=3)
' and write it to a sheet
Worksheets("Sheet1").Range("A1").Resize(UBound(MyMatrix, 1), UBound(MyMatrix, 2)).Value = MyMatrix
这是如何运作的?
如果我们查看下面的矩阵,我们可以将每一行视为可以转换为十进制数的二进制数。所以二进制
000
是十进制0
, 然后二进制 001
是十进制1
和二进制 010
是十进制2
等等:0 0 0 | 'decimal 0
0 0 1 | 'decimal 1
0 1 0 | 'decimal 2
1 0 0 | 'decimal 3
1 1 0 | 'decimal 4
1 0 1 | 'decimal 5
0 1 1 | 'decimal 6
1 1 1 | 'decimal 7
所以我们知道如果要创建矩阵,我们需要转换十进制数1
至7
成二进制数。然后每个二进制数代表矩阵的一行。因为定义矩阵的唯一数字是
n
(在示例中 n = 3
)我们可以使用它来计算矩阵的维度:2 ^ n
(在示例中 2^3 = 8
) n
所以我们定义了一个大小为
ReDim Matrix(1 To 2 ^ n, 1 To n)
的矩阵。 .然后我们需要从
1
生成十进制数至7
能够将它们转换为二进制文件。我们通过循环来做到这一点:For i = 0 To 2 ^ n - 1
(在示例中,这意味着 For i = 0 To 7
)。在那个循环中,我们转换每个十进制数
i
变成长度为 n
的二进制字符串.我们使用 BinaryString = DecToBin(i, n)
.最后,我们只需要将字符串拆分为矩阵的列。因此,我们使用另一个循环遍历该 BinaryString
For c = 1 To n
的字符。 (这意味着从字符 1 开始直到字符 n
)。并填充矩阵:Matrix(i + 1, c) = CLng(Mid$(BinaryString, c, 1))
这里Mid$(BinaryString, c, 1)
从字符串中挑选出字符并CLng
将其转换为 Long
number 所以它是数字并将其写入矩阵的正确位置Matrix(i + 1, c)
.我们最终返回该矩阵作为函数
CreateMatrix = Matrix
的结果。 .
关于arrays - 获取 0 和 1 组合的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68001412/