Skip to content

Instantly share code, notes, and snippets.

@shihongzhi
Created April 3, 2012 06:04
Show Gist options
  • Save shihongzhi/2289669 to your computer and use it in GitHub Desktop.
Save shihongzhi/2289669 to your computer and use it in GitHub Desktop.
Combination
#include <stdio.h>
#include <string.h>
//排列,用的是非递归方法,即2进制方法
char letter[] = "abcdefg";
int main()
{
int number = 1<<7;
int index, cur;
for (int i=1; i<number; ++i)
{
char tmp[] ="";
index = 0;
cur = i;
while (cur)
{
if (cur&1)
{
strncat(tmp, &letter[index], 1);
}
index++;
cur = cur>>1;
}
printf("%s\n", tmp);
}
return 0;
}
@shihongzhi
Copy link
Author

//usage:
//char letter[] = "abc";
//Arrange(letter, letter);
void Arrange(char *str, char *start)
{
    if (!*start)
    {
        printf("%s\n", str);
        return;
    }
    for (char *i=start; (*i)!='\0'; i++)  //基本思想是
    {
        char tmp = *start;
        *start = *i;
        *i = tmp;
        Arrange(str, start+1);
        tmp = *start;
        *start = *i;
        *i = tmp;
    }
}

void Arrange(char *str)
{
    Arrange(str, str);
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment