CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

如何求出 ABCD 的各种排列?

楼主andycpp(幻瞳)2005-04-02 11:30:06 在 C/C++ / C++ 语言 提问

就是把     ABCD     这四个字母的所有可能的顺序都输出,应该怎么写呢? 问题点数:20、回复次数:9Top

1 楼pcboyxhy(-273.15℃)回复于 2005-04-02 11:34:05 得分 5

#include   <stdio.h>  
  #include   <stdlib.h>  
   
  char   used[20]={0};  
  int   number[20],   len,   i,   p[20];  
   
  void   output()  
  {  
          printf("\n");  
          for(i=0;   i<len;   ++i)  
                  printf("%d   ",   number[p[i]]);  
  }  
   
  int   pailie(int   n)  
  {  
          int   ii;  
          if(n==len)  
                  output(   );  
         
          for(ii=0;   ii<len;   ++ii)  
                  if(!used[ii])  
                  {  
                          used[ii]   =   1;  
                          p[n]   =   ii;  
                          pailie(n+1);  
                          used[ii]   =   0;  
                  }  
          return   0;  
  }  
   
  int   main(int   argc,   char   *argv[])  
  {  
          int   index   =   0;  
          scanf("%d",   &len);  
          while(index<len)  
                  scanf("%d",   &number[index++]);  
          pailie(0);  
          system("PAUSE");  
          return   0;  
  }  
   
   
   
  这个是针对整数的  
  字符的只要稍微修改一下Top

2 楼QunKangLi(心里面疼得有点发酸 一定是有雾来了 打湿了我的眼眶)回复于 2005-04-02 11:36:01 得分 5

当还有数没选中时,循环取遍当前还没选中的数,将余下的进行递归运算.  
  数组中依次存入ABCD,当前选第N个数时,从X=N开始到X=4-N,将X元素与A元素互换,然后用&X进行递归.递归返回后互换X,A以恢复原数组Top

3 楼kozzii(double-double)回复于 2005-04-02 11:41:04 得分 3

#include   <iostream>  
  #include   <string>  
  #include   <algorithm>  
   
  using   namespace   std;  
   
  int   main()  
  {  
          string   s("ABCD");  
           
          while(next_permutation(s.begin(),s.end()))  
          {  
                  cout<<s<<endl;  
          }          
          system("pause");  
          return   0;  
  }Top

4 楼lyx6988()回复于 2005-04-02 11:42:47 得分 7

回溯算法  
  int   n;  
  char   used[MaxN];  
  int   p[MaxN];  
   
  void   permute(int   pos)  
  {   int   i;  
  /*如果已是第r个元素了,则可打印r个元素的排列   */  
  if   (pos==n)   {  
  for   (i=0;   i<n;i++)  
  cout   <<   (p[i]+1);  
  cout   <<   endl;  
  return;  
  }  
  for   (i=0;   i<n;i++)  
  if   (!used[i])   {   /*如果第i个元素未用过*/  
  /*使用第i个元素,作上已用标记,目的是使以后该元素不可用*/  
  used[i]++;  
  /*保存当前搜索到的第i个元素*/  
  p[pos]   =   i;  
  /*递归搜索*/  
  permute(pos+1);  
   
  /*恢复递归前的值,目的是使以后改元素可用*/  
  used[i]--;  
  }  
  }  
  Top

5 楼andycpp(幻瞳)回复于 2005-04-02 11:43:20 得分 0

楼上的     STL我也会用啊     现在只不过想知道一下原理     呵呵Top

6 楼andycpp(幻瞳)回复于 2005-04-02 11:45:22 得分 0

谢谢大家支持  
  午饭后回来结贴    
  我喜欢有注释的代码       HOHO~~~~~~~~Top

7 楼kozzii(double-double)回复于 2005-04-02 11:45:39 得分 0

少了一个;;  
  #include   <iostream>  
  #include   <string>  
  #include   <algorithm>  
   
  using   namespace   std;  
   
  int   main()  
  {  
          string   s("ABCD");  
                 
          do{  
                  cout<<s<<endl;  
          }while(next_permutation(s.begin(),s.end()));  
          system("pause");  
          return   0;  
  }Top

8 楼kozzii(double-double)回复于 2005-04-02 11:46:07 得分 0

faintTop

9 楼andycpp(幻瞳)回复于 2005-04-02 11:46:10 得分 0

谢谢大家支持  
  午饭后回来结贴    
  我喜欢有注释的代码       HOHO~~~~~~~~Top

相关问题

  • 如何排列窗口,如:水平排列,层叠排列.急!!!
  • 如何排列窗口,如:水平排列,层叠排列.急!!!
  • 7位数的各种排列组合
  • 如何按时间升降序排列???
  • 如何用listview实现Tbitmap的排列?
  • 如何规则排列图形?
  • 如何排列Delphi的学习顺序??????
  • 一道数学题:排列组合,ABCD按照不同的顺序有多少种排列,分别列出来,用JSP。
  • 一道数学题:排列组合,ABCD00000不考虑“0”的位置按照ABCD不同的顺序有3024种排列方法,分别列出来,用JSP。
  • 求——排列组合中,求各种组合方式的——算法!!!

关键词

  • abcd
  • cout
  • include
  • using namespace std
  • int main

得分解答快速导航

  • 帖主:andycpp
  • pcboyxhy
  • QunKangLi
  • kozzii
  • lyx6988

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo