2017年计算机二级office操作题,2017年计算机二级C++辅导实例编程:字母全排列快速算法C代码

副标题:2017年计算机二级C++辅导实例编程:字母全排列快速算法C代码

时间:2023-09-07 04:53:01 阅读: 最新文章 文档下载
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。


  字母全排列快速算法C代码

  全排列,比如字母ABC,所有排列有A ,AB,AC,ABC,ACB,B,BA,BC,BAC,BCA,C,CA,CB,CAB,CBA.

  //原理是插入, 在一个字符串的所有位置插入新字符.

  //如: AB 插入C , 位置有 1A2B3, 插入后形成 CAB ACB ABC

  char *AllList(char *str, int *pNum)

  {

  int i, j, k, n;

  int len = strlen(str);

  int Total = 0;

  int count, oldcount;

  int size;

  char *Buf;

  char *p, *p1;

  if (len > 10) return NULL;

  //计算总的组合数目

  for (i = 0, j = 1; i < len; i++)

  {

  j *= (len - i);

  Total += j;

  }

  //创建二维数组, 存放全部组合

  size = len + 1;

  if ((Buf = (char *)malloc(Total * size)) == NULL)

  {

  return NULL;

  }

  for (k = 0, count = 0; k < len; k++)  //所有要插入的字符

  {

  oldcount = count;

  p = Buf;

  p1 = Buf + count * size;

  for (i = 0; i < oldcount; i++, p += size)  //插入到所有字符串中,形成新的字符串

  {

  n = strlen(p);

  for (j = 0; j <= n; j++, count++, p1 += size) //在字符串所有位置插入

  {

  memcpy(p1, p, n);

  p1[n] = p1[j];

  p1[j] = str[k];

  p1[n + 1] = '

  在我的机器上排列10个字母大约0.5秒。

2017年计算机二级C++辅导实例编程:字母全排列快速算法C代码.doc

本文来源:https://www.wddqw.com/Gy5n.html