a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 46|回复: 0

[C++] 2011年计算机二级C++辅导实例编程(20)

[复制链接]
发表于 2012-7-31 21:56:58 | 显示全部楼层 |阅读模式
  字母全排列快速算法C代码
  q' D7 T5 H0 T; u  全排列,比如字母ABC,所有排列有A ,AB,AC,ABC,ACB,B,BA,BC,BAC,BCA,C,CA,CB,CAB,CBA.
3 y) r; U  G- t  //原理是插入, 在一个字符串的所有位置插入新字符.0 n) k! w/ h. A: i: u/ c- a
  //如: AB 插入C , 位置有 1A2B3, 插入后形成 CAB ACB ABC0 p9 R4 F: J: N8 t( i
  char *AllList(char *str, int *pNum)$ g* V: y0 Z  ^3 k* v- z" `
  {( P$ E/ h9 q+ I7 u( p( d* {
  int i, j, k, n;3 b; U3 F( c( r+ n8 W5 _
  int len = strlen(str);3 B) K8 I& X( O9 H2 ^: [( f2 \
  int Total = 0;5 d8 [  ~+ y1 n5 E4 U
  int count, oldcount;4 B/ H1 G, j2 E% f
  int size;
2 n: Q, L4 k# y  char *Buf;
7 f% r% I) L0 f* A* a* l  char *p, *p1;4 B; b* W) c1 G5 i; T; _0 ]6 h" X
  if (len > 10) return NULL;* C! _+ Y5 z$ h  |
  //计算总的组合数目
, E; y8 P, n; l; T$ J. {& H4 ^  for (i = 0, j = 1; i < len; i++)
/ ]9 z4 ?4 S4 \5 H, }6 J6 U  {: K# h- N9 s3 j: S: Z7 G
  j *= (len - i);
3 `+ s" y( I: G6 H) k' I) {  Total += j;. q2 x, O; ]& |# W
  }& |$ [1 N1 X, g0 |7 ?
  //创建二维数组, 存放全部组合% E  m  m0 `# T9 {: |7 r/ y
  size = len + 1;7 \- R) s/ S5 L& `0 e7 q" F) h$ Z
  if ((Buf = (char *)malloc(Total * size)) == NULL)- G" y$ }/ H& z' e
  {
3 {( r7 P! C4 G7 f) g" m5 |  return NULL;
: _: H& c6 |$ N+ R( U  }
9 Z- B; |6 @! N  for (k = 0, count = 0; k < len; k++)  //所有要插入的字符& H* @9 ~0 s3 l4 L2 [* X
  {( m/ l- @( p! u' d9 R; ~
  oldcount = count;
7 r# Z1 R  {9 X& v  p = Buf;
: y$ S  G1 M# x( `/ C% v; |; I  p1 = Buf + count * size;  e, A9 |6 g+ ~' I* G
  for (i = 0; i < oldcount; i++, p += size)  //插入到所有字符串中,形成新的字符串
2 a* h- x6 ^0 h( K  {
; L( F/ l' |1 w9 f" S# t  n = strlen(p);
( [; M- O6 t2 c/ R
& b- H( C. q0 I1 H1 m& p9 x  for (j = 0; j
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-18 20:09 , Processed in 0.213395 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表