VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1020|回复: 9

0,1的排列问题。

[复制链接]

1

主题

4

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-1-26 00:00:01 | 显示全部楼层 |阅读模式
有M个0,1的排列,这个排列通过程序打印出来。如有3个0,1的排列,应打出:
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
这该怎样生成,请高手帮忙,先谢了!对了,M的取值不是事先知道的,可以临时改变。
回复

使用道具 举报

0

主题

21

帖子

15.00

积分

新手上路

Rank: 1

积分
15.00
发表于 2020-2-24 12:30:01 | 显示全部楼层
我想到一个办法,就是转成2进制不就行了吗!
比如你输入5,先得出5个1的二进制为31,(自己解决)
然后:
写一个将10进制转成二进制的函数,比如:
Public Function DecToBinary(dec As Integer)
    Dim m As String, n As String, d As Integer
    d = dec
    Do
        m = (d Mod 2) & m
        d = d \ 2
    Loop Until d = 0
    DecToBinary = m
End Function

然后再:
dim i as Integer
dim s as string
for i=0 to 31
  s=str(DecToBinary(i))
  print s & vbcrlf
next i
回复

使用道具 举报

1

主题

4

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-3-10 06:15:01 | 显示全部楼层
看来,是我没说清楚,我打算把这些排列存到一个数组中,到时还要用到这些数。
回复

使用道具 举报

1

主题

4

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-3-10 14:30:01 | 显示全部楼层
也就是要得到一列数:
a(0)=0 a(1)=0 a(2)=0
a(0)=0 a(1)=0 a(2)=1
         .
         .
         .
a(0)=1 a(1)=1 a(2)=1
希望能得到这样的结果。
回复

使用道具 举报

0

主题

5

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-3-14 19:30:02 | 显示全部楼层
给你写了个函数CreateArray, 并有例子:

Option Explicit

Private Sub CreateArray(ByVal M As Integer, ByRef ABuf)
    ReDim ABuf(2 ^ M - 1, M - 1)
    Dim iRow As Integer
    Dim iCol As Integer
    Dim iNum As Integer
    For iRow = 0 To 2 ^ M - 1
        iNum = iRow
        For iCol = M - 1 To 0 Step -1
            ABuf(iRow, iCol) = iNum Mod 2
            iNum = iNum \ 2
        Next iCol
    Next iRow
End Sub

Private Sub Command1_Click()
    Dim A() As Integer
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
    k = InputBox("输入M的值")
    CreateArray k, A
    For i = 0 To 2 ^ k - 1
        For j = 0 To k - 1
            Debug.Print A(i, j);
        Next j
        Debug.Print
    Next i
End Sub
回复

使用道具 举报

0

主题

34

帖子

17.00

积分

新手上路

Rank: 1

积分
17.00
发表于 2020-3-23 15:45:01 | 显示全部楼层
另一种方法,不用转换为二进制,
Dim M, a() As Integer, i, P
M = 4: ReDim a(M - 1)
Do
    P = M - 1
    For i = 0 To P
        Debug.Print a(i);
    Next: Debug.Print
    Do
        a(P) = a(P) + 1
        If a(P) > 1 Then a(P) = 0: P = P - 1 Else Exit Do
    Loop While P > -1
Loop While P > -1
回复

使用道具 举报

0

主题

34

帖子

17.00

积分

新手上路

Rank: 1

积分
17.00
发表于 2020-3-23 20:30:01 | 显示全部楼层
速度应该比转换为二进制的快点
其中数组a()中存储各位数值
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-3-29 11:15:01 | 显示全部楼层
从0开始自加,每一次都转成二进制存到数组中
回复

使用道具 举报

0

主题

4

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-4-3 09:30:01 | 显示全部楼层
如果是我,我会有以下几种方法实现
1: 数据库 文本文件也可以当成数据库操作
2:把数据加到LISTVIEW 或者 list中
Sorted 属性   

返回一个值,指定控件的元素是否自动按字母表顺序排序。


回复

使用道具 举报

1

主题

4

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-4-11 00:15:01 | 显示全部楼层
谢谢各位的帮助!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表