全球主机交流论坛

标题: 一个排列算法题目 [打印本页]

作者: Kvm    时间: 2012-9-16 12:31
标题: 一个排列算法题目
今天做了一个算法题目:
要求输入n个A,m个B,打印出由这些AB组成的字串。比如2个A,2个B: AABB ABAB ABBA BAAB BABA BBAA
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. int total=0;
  5. //void num_fun(int num, int *p0, int *p1)
  6. int num_fun(int num, int *p, char *q)
  7. {
  8.      int i=0,j=0;
  9.      while(num!=0)
  10.      {
  11.          if (num%2==1)
  12.          {
  13.              i++;
  14.              q[j]=1;
  15.          }
  16.          else
  17.            q[j] = 0;
  18.          j++;
  19.          num /= 2;
  20.      }
  21.      *p=j;
  22.      return i;
  23. }

  24. void print(unsigned long long kangqi, int bit_total, char *p)
  25. {
  26.      int i;
  27.      if(bit_total < total)
  28.      {
  29.          for(i=0;i<total-bit_total;i++)
  30.          {
  31.              printf("B");
  32.          }
  33.      }
  34.      while(bit_total!=0)
  35.      {
  36.          if(p[bit_total-1]==1)
  37.          {
  38.              printf("a");
  39.          } else
  40.          {
  41.              printf("b");
  42.          }
  43.          bit_total -- ;
  44.      }
  45. printf(" ");

  46. }

  47. int main()
  48. {
  49.      int a,b,i,bit_total=0;
  50.      char *p;
  51.      unsigned long long kangqi;
  52.      scanf("%d,%d",&a,&b);
  53.      total = a+b;
  54.      p = (char *)malloc(total);
  55.      kangqi = pow(2,total)-1;
  56.      while(kangqi!=0)
  57.      {
  58.          bit_total = 0;
  59.          if (a==num_fun(kangqi,&bit_total,p))
  60.          {
  61.              print(kangqi,bit_total,p);
  62.          }
  63.          kangqi--;
  64.      }

  65.      return 0;
  66. }
复制代码
开始我计划使用递归的思想来处理,但是我想了老半天,递归没有出路,两位师傅有没有高招?

最后我采用自己的常规思维,把ab当成10来看待,使用2进程和10进程之间的转化完成了。

算法。。。。。。。

作者: 风雨前行    时间: 2012-9-16 12:33
(⊙o⊙)…
虽然看不懂你在说什么,不是貌似很牛逼的样子
作者: 单手摘月    时间: 2012-9-16 12:33
提示: 作者被禁止或删除 内容自动屏蔽
作者: ccf    时间: 2012-9-16 12:34
虽不懂但觉厉...
作者: windywinter    时间: 2012-9-16 12:44
多重集排列
作者: ccc    时间: 2012-9-16 12:50
不会了 哎
作者: 莫桑比特    时间: 2012-9-16 13:41
虽然看不懂你在说什么,不是貌似很牛逼的样子
作者: lsylsy2    时间: 2012-9-16 15:17
必须C?不能C++?
如果C++,直接next_permutation
作者: guyusoftware    时间: 2012-9-16 15:18
我是菜鳥
作者: smyz    时间: 2012-9-16 15:21
真想写?  我就去写一个。。还是只是灌水。。。
作者: wdlth    时间: 2012-9-16 15:23
二进制吧,二进程?




欢迎光临 全球主机交流论坛 (https://lilynana.eu.org/) Powered by Discuz! X3.4