#include <stdio.h>
void pern(char s[],int k)
{int i
char c
if(k==2)
printf("%s\n",s)
else
for(i=ki<=2i++)
{c=s[k]s[k]=s[i]s[i]=c
pern(s,k+1)
c=s[k]s[k]=s[i]s[i]=c
}
}
void print_all_permutations(char *str)
{ pern(str,0)
return
}
int main(void)
{ char str[256] = "ABC"
print_all_permutations(str)
return 0
}
N个元素中取出M个元素的所有排列#include <stdio.h>#define MAX 10int used[MAX]int result[MAX]int M, Nvoid print() { int i for(i = 0i <Mi++) printf("%d ", result[i])printf("\n")}void Perm(int step) { int iif (step == M) print()elsefor(i = 0i <Ni++)if (!used[i]) {used[i] = 1 result[step] = i + 1 Perm(step + 1) used[i] = 0 }}main() {scanf("%d %d", &M, &N) Perm(0)}
N个元素中取出M个元素的所有组合
#include<stdio.h>#define MAX 20int c[MAX] = {0}int M, Nvoid print() {int i for(i = 0i <Mi++)printf("%d", c[i + 1]) printf("\n")}void Comp(int m) {if (m == M + 1)print() elsefor(c[m] = c[m - 1] + 1c[m] <= N - M + mc[m]++)Comp(m + 1)}void main() {scanf("%d %d", &M, &N) Comp(1)}
#include <stdio.h>void Permutation(char*a,char*current)
int main()
{
char s[30]="abc"
Permutation(s,s)
return 0
}
void Permutation(char*a,char*current)
{
if(*current=='\0')
printf("%s\n",a)
for(char*next=current*next!='\0'next++)
{
char tem=*current
*current=*next
*next=tem
Permutation(a,current+1)
tem=*current
*current=*next
*next=tem
}
}