| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1820 人关注过本帖
标题:两元素的排列问题
只看楼主 加入收藏
zgsdwf
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-10-2
收藏
得分:0 
回复 10# Joforn 的帖子
N = -1
  Do While N < 0
    TempSTR = InputBox("请输入N(1的个数):", "南宫飘雪", "4")
    If IsNumeric(TempSTR) Then
      N = Val(TempSTR)
      If N > 31 Then I = -1
    End If
  Loop
  
  M = -1
  Do While M < 0
    TempSTR = InputBox("请输入N(1的个数):", "南宫飘雪", "4")
    If IsNumeric(TempSTR) Then
      M = Val(TempSTR)
      If M + N > 31 Then M = -1
    End If
  Loop
怎么都是“请输入N(1的个数”应该有一个是M的吧?

TempSTR = CStr(NUM And 1) & TempSTR   这里的and属于什么运算

[[it] 本帖最后由 zgsdwf 于 2008-10-2 23:09 编辑 [/it]]
2008-10-02 22:51
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
收藏
得分:0 
[bo][un]zgsdwf[/un] 在 2008-10-2 22:51 的发言:[/bo]

N = -1
  Do While N < 0
    TempSTR = InputBox("请输入N(1的个数):", "南宫飘雪", "4")
    If IsNumeric(TempSTR) Then
      N = Val(TempSTR)
      If N > 31 Then I = -1
    End If
  Loop
  
  M ...

https://bbs.bccn.net/thread-236101-1-1.html

位运算中的“按位与”运算
2008-10-03 09:22
Joforn
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1242
专家分:122
注 册:2007-1-2
收藏
得分:0 
楼主要注意,我给的不是标准答案,只是一个处理方法而已,有些排列没有被输出,你自己修改一下代码就行了。

VB QQ群:47715789
2008-10-03 09:52
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
收藏
得分:0 
[bo][un]Joforn[/un] 在 2008-10-3 09:52 的发言:[/bo]

楼主要注意,我给的不是标准答案,只是一个处理方法而已,有些排列没有被输出,你自己修改一下代码就行了。

开什么玩笑……还能漏解呀?

我觉得,只要算法弄清楚了,自己写一个不是难事。
2008-10-03 10:10
Joforn
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1242
专家分:122
注 册:2007-1-2
收藏
得分:0 
[bo][un]multiple1902[/un] 在 2008-10-3 10:10 的发言:[/bo]


开什么玩笑……还能漏解呀?

我觉得,只要算法弄清楚了,自己写一个不是难事。


呵呵,去掉了几处循环。防止别人求作业答案的。
如果楼主只是想问个思路的话就一定会发现并未包括所有解。
如果他只是想要一个作业的答案,那他可能就不会看到我现在的提示。

主要是被作业帖弄怕了。

VB QQ群:47715789
2008-10-03 11:30
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
收藏
得分:0 
[bo][un]Joforn[/un] 在 2008-10-3 11:30 的发言:[/bo]



呵呵,去掉了几处循环。防止别人求作业答案的。
如果楼主只是想问个思路的话就一定会发现并未包括所有解。
如果他只是想要一个作业的答案,那他可能就不会看到我现在的提示。

主要是被作业帖弄怕了。

作业贴已经减少了很多了
2008-10-03 12:39
zgsdwf
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-10-2
收藏
得分:0 
你好老大,我现在有一个想法,就是如果要排的是2个1、3个0那么对应的最大二进制数为11000最小为00011,将最大的11000转为十进制作递减,再转为二进制,然后作判断只保留含有两个1的字符串。
问题1:此方法可以吗?
问题2:我为此写了一段测试代码如下。但运行时for循环在第一次还是正确的,第二次11000所对应的十进制数一下变为-1,不明白为何会这样,还请老大指点


Private Sub Form_Click()

Dim i As Integer
Dim j As Integer
Dim n As String
Dim m As String
n = InputBox("输入字符串:")
m = StrReverse(n)
j = Con(n)
  For i = Con(m) To j
      Print De(j, Len(n))
      j = j - 1
   Next
End Sub

Public Function De(DecimalValue As Integer, MinimumDigits As Integer) As String '十进制转二进制
Dim result As String
Dim ExtraDigitsNeeded As Integer

DecimalValue = Abs(DecimalValue)

Do
    result = CStr(DecimalValue Mod 2) & result
    DecimalValue = DecimalValue \ 2
Loop While DecimalValue > 0
ExtraDigitsNeeded = MinimumDigits - Len(result)
If ExtraDigitsNeeded > 0 Then
    result = String(ExtraDigitsNeeded, "0") & result
End If

De = result

End Function

 Public Function Con(ByVal strBin As String) As Integer '二进制转十进制
  Dim tmpVal As Integer
  iCount     As Long
  Dim tmpV   As String
          For iCount = 1 To Len(strBin)
                 tmpVal = Val(tmpVal) + Val(Mid$(strBin, iCount, 1)) * (2 ^ (Len(strBin) - iCount))
                                    
          Next iCount
                      Con = tmpVal
  End Function
2008-10-03 14:08
Joforn
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1242
专家分:122
注 册:2007-1-2
收藏
得分:0 
递减应该不行吧,11B(3)-1=10(2)就不正确了

VB QQ群:47715789
2008-10-03 14:20
zgsdwf
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-10-2
收藏
得分:0 
[bo][un]Joforn[/un] 在 2008-10-3 14:20 的发言:[/bo]

递减应该不行吧,11B(3)-1=10(2)就不正确了

这种情况应该可以通过判断剔除吧?如只有11就不需作处理了
2008-10-03 14:32
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
收藏
得分:0 
可行归可行,时间复杂度太大了。

我的递归生成算法时间复杂度可以,空间复杂度也就是O(m+n)。
2008-10-03 15:05
快速回复:两元素的排列问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016955 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved