今天做了一个算法题目:
要求输入n个A,m个B,打印出由这些AB组成的字串。比如2个A,2个B: AABB ABAB ABBA BAAB BABA BBAA- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- int total=0;
- //void num_fun(int num, int *p0, int *p1)
- int num_fun(int num, int *p, char *q)
- {
- int i=0,j=0;
- while(num!=0)
- {
- if (num%2==1)
- {
- i++;
- q[j]=1;
- }
- else
- q[j] = 0;
- j++;
- num /= 2;
- }
- *p=j;
- return i;
- }
-
- void print(unsigned long long kangqi, int bit_total, char *p)
- {
- int i;
- if(bit_total < total)
- {
- for(i=0;i<total-bit_total;i++)
- {
- printf("B");
- }
- }
- while(bit_total!=0)
- {
- if(p[bit_total-1]==1)
- {
- printf("a");
- } else
- {
- printf("b");
- }
- bit_total -- ;
- }
- printf(" ");
-
- }
-
- int main()
- {
- int a,b,i,bit_total=0;
- char *p;
- unsigned long long kangqi;
- scanf("%d,%d",&a,&b);
- total = a+b;
- p = (char *)malloc(total);
- kangqi = pow(2,total)-1;
- while(kangqi!=0)
- {
- bit_total = 0;
- if (a==num_fun(kangqi,&bit_total,p))
- {
- print(kangqi,bit_total,p);
- }
- kangqi--;
- }
-
- return 0;
- }
复制代码 开始我计划使用递归的思想来处理,但是我想了老半天,递归没有出路,两位师傅有没有高招?
最后我采用自己的常规思维,把ab当成10来看待,使用2进程和10进程之间的转化完成了。
算法。。。。。。。
|