| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1820 人关注过本帖
标题:两元素的排列问题
只看楼主 加入收藏
zgsdwf
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-10-2
收藏
 问题点数:0 回复次数:22 
两元素的排列问题
求能打印出由n个1和m个0所有排列的算法或代码,那位达人能帮一下
搜索更多相关主题的帖子: 排列 元素 
2008-10-02 19:46
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
收藏
得分:0 
用深度优先搜索做比较方便,以下是pascal语言代码,看懂了很容易移植到VB里。
程序代码:
program create;
const maxn=20;
var m,n:byte;
    s:array[1..maxn] of byte;
procedure print;
var i:integer;
begin
  for i:=1 to m+n do
    write(s[i]);
  writeln;
end;

procedure try(m,n:byte;depth:byte);
begin
  if m+n=0 then print
  else begin
    if m>=1 then begin
      s[depth]:=0;
      try(m-1,n,depth+1);
    end; // if m>=1
    if n>=1 then begin
    s[depth]:=1;
    try(m,n-1,depth+1);
    end; // if n>=1
  end;
end;

begin
  readln(m,n);
  try(m,n,1);
end.
2008-10-02 20:56
zgsdwf
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-10-2
收藏
得分:0 
回复 2# multiple1902 的帖子
先谢了!能不能给翻译成vb代码啊,pascal看不懂
2008-10-02 21:06
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
收藏
得分:0 
[bo][un]zgsdwf[/un] 在 2008-10-2 21:06 的发言:[/bo]

先谢了!能不能给翻译成vb代码啊,pascal看不懂

你先看看深度优先搜索的相关知识,然后我给你讲解,然后你自己写出来。
2008-10-02 21:20
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
收藏
得分:0 
基本思路是,如果我要生成5个数,其中2个0和3个1的排列,那么我就先让第一位为0,然后就是1个0、3个1的排列问题了(递归);接着让第一位为1,就转化为了2个0、2个1的排列问题。就这样递归下去,直到5位都确定之后输出当前结果。
2008-10-02 21:22
我是菜鸟哦
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:921
专家分:209
注 册:2007-5-4
收藏
得分:0 
学C,直接出来

偶是菜鸟鸟偶惧WHO?!!!!
2008-10-02 21:36
Joforn
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1242
专家分:122
注 册:2007-1-2
收藏
得分:0 
Private Sub Form_Click()
  Dim M As Long
  Dim N As Long
  
  Dim I As Long, K As Long
  Dim sI As Long, eI As Long
  
  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
  If M = 0 Or N = 0 Then Exit Sub
  
  Me.Cls
  Me.AutoRedraw = True
  Print Long2STR(2 ^ N - 1, M + N)
  For I = 0 To N - 1
    sI = 0: eI = 0
    For K = 0 To I
      sI = 2 * sI + 1
    Next K
    sI = sI * 2 ^ (N - I - 1)
    For K = 1 To N - I - 1
      eI = 2 * eI + 1
    Next K
   
    For K = 1 To M + N - K - I
      Print Long2STR((sI * (2 ^ K)) Or eI, M + N)
    Next
  Next I
End Sub

Private Function Long2STR(ByVal NUM As Long, ByVal Lenght As Long) As String
  Dim TempSTR As String
  
  Do While NUM
    TempSTR = CStr(NUM And 1) & TempSTR
    NUM = NUM \ 2
  Loop
  Lenght = Lenght - Len(TempSTR)
  If Lenght > 0 Then TempSTR = String(Lenght, "0") & TempSTR
  Long2STR = TempSTR
End Function

VB QQ群:47715789
2008-10-02 22:19
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
Joforn
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1242
专家分:122
注 册:2007-1-2
收藏
得分:0 
[bo][un]zgsdwf[/un] 在 2008-10-2 22:21 的发言:[/bo]

多谢了!先研究下!!


嗯,慢慢看,有不懂的地方找本基础书对照看下。

VB QQ群:47715789
2008-10-02 22:28
快速回复:两元素的排列问题
数据加载中...
 
   



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

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