输入一个字符串,输出该字符串中字符的所有组合。(腾讯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
分析:由于遵守统计学的原理,故每次输出的个数为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
相关文章推荐
- Java练习题-输入一个字符串,输出该字符串中字符的所有组合
- 题目:输入一个字符串,输出该字符串中字符的所有组合
- Swift - 排列组合之全排列 (输入一个字符串,输出该字符串包含的字符的所有组合)
- 输入一个字符串,输出该字符串中字符的所有组合
- 输入一个字符串,输出该字符串中字符的所有组合
- Java练习题-输入一个字符串,输出该字符串中字符的所有组合(二)
- 输入一个字符串,输出该字符串中字符的所有组合
- 【编程题】输入一个字符串,输出该字符串中相邻字符的所有组合。
- 输入一个字符串,输出该字符串中字符的所有组合 C#【总结】
- 输入一个字符串,输出该字符串中字符的所有组合
- 数据结构基础(11)------------输出字符串的所有组合( Permutation)--腾讯笔试附加题
- 题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。
- 读取一个字符串,输出它里面字符的所有组合
- 题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。
- 递归问题之一:给定一字符串,输出字符串中所有字符子串的各种组合形式,长度为一个字符到字符串的长度,忽略排序
- Java 组合的实现- 输入一个字符,输出字符中字母组成的所有组合
- 笔试题-输入一个字符数组将这些字符串按顺序合并输出-指针数组-数组指针-函数指针-指针函数
- 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。
- C#实现输入一个字符串输出该字符串字符的所有排列方式
- C语言输入一个字符串,输出字符串的所有组合