全球主机交流论坛
标题:
一个排列算法题目
[打印本页]
作者:
Kvm
时间:
2012-9-16 12:31
标题:
一个排列算法题目
今天做了一个算法题目:
要求输入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进程之间的转化完成了。
算法。。。。。。。
作者:
风雨前行
时间:
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