| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1820 人关注过本帖
标题:两元素的排列问题
取消只看楼主 加入收藏
zgsdwf
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-10-2
收藏
 问题点数:0 回复次数:8 
两元素的排列问题
求能打印出由n个1和m个0所有排列的算法或代码,那位达人能帮一下
搜索更多相关主题的帖子: 排列 元素 
2008-10-02 19:46
zgsdwf
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-10-2
收藏
得分:0 
回复 2# multiple1902 的帖子
先谢了!能不能给翻译成vb代码啊,pascal看不懂
2008-10-02 21:06
zgsdwf
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-10-2
收藏
得分:0 
回复 5# multiple1902 的帖子
老大!您还是给写一下吧,研究了半天还是搞不懂
2008-10-02 22:19
zgsdwf
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-10-2
收藏
得分:0 
回复 7# Joforn 的帖子
多谢了!先研究下!!
2008-10-02 22:21
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
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
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
zgsdwf
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-10-2
收藏
得分:0 
本人太菜,对递归还未深入了解,对于经典的汉诺塔问题我至今未全搞清,很想学一下,还请老大给写一个使用递归解决此问题的代码
2008-10-03 15:21
zgsdwf
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-10-2
收藏
得分:0 
使用我的递减法测试成功,只是程序运行开销较大,排列8个1、9个0须40多秒加上我的机器也较衰(c4 1.7),再次请老大给写一个使用递归解决此问题的代码
2008-10-03 21:39
快速回复:两元素的排列问题
数据加载中...
 
   



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

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