64,646
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int m;//记录字符串长度
int n;//记录字符串中的字符种类数
char map[256];//记录是哪几种字符
int count[256];//记录每种字符有多少个
int stack[1000];//递归用的栈,并记录当前生成的排列
void Make_Map(char *str) {//统计字符串的相关信息
int s[256];
int i;
memset(s,0,sizeof(s));
memset(count,0,sizeof(count));
m=strlen(str);
while(*str) {
s[*str]++;
str++;
}
n=0;
for (i=0;i<256;i++)
if (s[i]) {
map[n]=i;
count[n]=s[i];
n++;
}
}
void Find(int depth) {//递归式回溯法生成全排列
if (depth==m) {
int i;
for (i=0;i<depth;i++) putchar(map[stack[i]]);
putchar('\n');
} else {
int i;
for (i=0;i<n;i++)
if (count[i]) {
stack[depth]=i;
count[i]--;
Find(depth+1);
count[i]++;
}
}
}
void main(int argc,char**argv) {
if (argc<2) {
printf("%s 要产生全排列的字符串\n",argv[0]);
return;
}
Make_Map(argv[1]);
Find(0);
}
#include <stdio.h>
void dfs(char* str, int begin, int len)
{
if(begin == len+1)
return;
puts(str);
for(int i=begin; i<len; ++i)
{
str[i] = '0';
dfs(str, i+1, len);
str[i] = '1';
}
}
int main()
{
char str[] = "11111111111";
dfs(str, 0, sizeof str - 1);
return 0;
}
或者 转换为二进制输出
#include <stdio.h>
#include <limits.h>
#define MAX 0x800u
char* getIntBitStr(int key)
{
if(key<0 || key>MAX-1)
return NULL;
static char str[sizeof(int)*CHAR_BIT+1];
for(unsigned int flag=MAX>>1, i=0; flag!=0; flag >>= 1, ++i)
str[i] = !!(key & flag)+'0';
return str;
}
int main()
{
for(int i=0; i<MAX; ++i)//i最大值 0x7FF 二级制 111 1111 1111 一共11个1
puts(getIntBitStr(i));
return 0;
}