| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付赛孚耐:软件保护加密专家
身份认证令牌USB KEY   
共有 706 人关注过本帖
标题:两元素的排列问题
收藏  订阅  推荐  打印 
zgsdwf
Rank: 1
等级:新手上路
帖子:9
积分:216
注册:2008-10-2
两元素的排列问题

求能打印出由n个1和m个0所有排列的算法或代码,那位达人能帮一下
搜索更多相关主题的帖子: 排列  元素  
2008-10-2 19:46
multiple1902
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:41
帖子:4479
积分:45682
注册:2007-2-9

用深度优先搜索做比较方便,以下是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.

“高考”这个词在耳边不断萦绕,心中的激动不言而喻。写下一句话,一起努力。Let's struggle together.
2008-10-2 20:56
zgsdwf
Rank: 1
等级:新手上路
帖子:9
积分:216
注册:2008-10-2
回复 2# multiple1902 的帖子

先谢了!能不能给翻译成vb代码啊,pascal看不懂
2008-10-2 21:06
multiple1902
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:41
帖子:4479
积分:45682
注册:2007-2-9

zgsdwf 在 2008-10-2 21:06 的发言:

先谢了!能不能给翻译成vb代码啊,pascal看不懂
你先看看深度优先搜索的相关知识,然后我给你讲解,然后你自己写出来。

“高考”这个词在耳边不断萦绕,心中的激动不言而喻。写下一句话,一起努力。Let's struggle together.
2008-10-2 21:20
multiple1902
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:41
帖子:4479
积分:45682
注册:2007-2-9

基本思路是,如果我要生成5个数,其中2个0和3个1的排列,那么我就先让第一位为0,然后就是1个0、3个1的排列问题了(递归);接着让第一位为1,就转化为了2个0、2个1的排列问题。就这样递归下去,直到5位都确定之后输出当前结果。

“高考”这个词在耳边不断萦绕,心中的激动不言而喻。写下一句话,一起努力。Let's struggle together.
2008-10-2 21:22
我是菜鸟哦
Rank: 12Rank: 12Rank: 12
等级:版主
威望:14
帖子:757
积分:8626
注册:2007-5-4

学C,直接出来

偶是菜鸟鸟偶惧WHO?!!!!
2008-10-2 21:36
Joforn
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:21
帖子:1207
积分:12788
注册:2007-1-2

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
2008-10-2 22:19
zgsdwf
Rank: 1
等级:新手上路
帖子:9
积分:216
注册:2008-10-2
回复 5# multiple1902 的帖子

老大!您还是给写一下吧,研究了半天还是搞不懂
2008-10-2 22:19
zgsdwf
Rank: 1
等级:新手上路
帖子:9
积分:216
注册:2008-10-2
回复 7# Joforn 的帖子

多谢了!先研究下!!
2008-10-2 22:21
Joforn
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:21
帖子:1207
积分:12788
注册:2007-1-2

zgsdwf 在 2008-10-2 22:21 的发言:

多谢了!先研究下!!
嗯,慢慢看,有不懂的地方找本基础书对照看下。
2008-10-2 22:28
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.064085 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved