您的位置:首页 > 其它

输入一个字符串,输出该字符串中字符的所有组合。(腾讯2014笔试附加题)

2014-03-31 19:15 447 查看
/*问题:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。

分析:由于遵守统计学的原理,故每次输出的个数为2^n-1个,n为输入的字符串长度。这样就可以用二进制表示的方式来求解,

从1到2^n-1中每个数的二进制表示中1的位置即为要输出的字符串中的位置。

*/

#include "StdAfx.h"

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <math.h>

void PutAnswer(char *p,int n)

{

int i,j,k,count,d,t;

for(t=1;t<=(pow(2.0,n)-1);t++)

{

j=0,count=0,d=0;

i=t;

int *buf=(int *)malloc(n*sizeof(int));

while(i)

{

if(i%2==1)

{

buf[j]=1;

j++;

count++;

}

else

{

buf[j]=0;

j++;

}

i=i/2;

}

char *put=(char *)malloc((count+1)*sizeof(char));

put[count]=0;

for(k=0;k<n;k++)

{

if(buf[k]==1)

{

put[d]=p[k];

d++;

}

}

printf("%s\r\n",put);

free(buf);

free(put);

}

}

int main ()

{

char *p = "abcdefg";

int len=strlen(p);

PutAnswer(p,len);

p=NULL;

system("pause");

return 0;

}

/*如输入123,输出的为1,2,3,12,13,23,123;

二进制表示 输出

0001 1

0010 2

0011 12(第1和2位的数)下同

0100 3

0101 13

0110 23

0111 123
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐