n全排列输出和 n个数的组合(数字范围a~b)

n全排列输出:

int WPermutation(int num, bool bRepeat)
num表示num全排列 bRepeat标志是否产生重复元素的序列。 int Permutation(int n, int* A, int cur, bool bRepeat)
{
static int number = 0;
if(cur == n)
{
number++;
for(int i = 0; i< n; i++)
{
printf("%d ", A[i]);
}
printf("\n");
}
else
{
for(int i = 1; i <= n; i++)
{
int ok = 1;
for(int j = 0; j < cur; j++)
{
if(!bRepeat)
{
if(A[j] == i)
{
ok = 0;
}
}
} if(ok)
{
A[cur] = i;
Permutation(n, A, cur + 1, bRepeat);
} }
} return number;
}
int WPermutation(int num, bool bRepeat)
{
printf("%d permutation(%s): %d ~ %d\n", num, bRepeat?"repeat mode":"single mode", 1, num);
int n = num;
int *A = (int*)malloc(n*sizeof(int));
memset(A, 0, sizeof(n*sizeof(int)));
int cur = 0;
int number = Permutation(n, A, cur, bRepeat);
delete [] A ;
A = NULL;
printf("over!\n");
return number; } int Wpermutation(int st, int en, int n, bool bRepeat);
n个数的组合(数字范围st~en),考虑重复元素: n表示n个数字组合 每个数字范围:st~en bRepeat标志是否产生重复元素的序列。 int Permutation(int st, int en, int n, int* A, int cur, bool bRepeat)
{
static int number = 0; if(cur == n)
{
number++;
for(int i = 0; i< n; i++)
{
printf("%d ", A[i]);
}
printf("\n");
}
else
{
for(int i = st; i <= en; i++)
{
int ok = 1;
for(int j = 0; j < cur; j++)
{
if(!bRepeat)
{
if(A[j] == i)
{
ok = 0;
}
}
} if(ok)
{
A[cur] = i;
Permutation(st, en, n, A, cur + 1, bRepeat);
} }
} return number;
} int Wpermutation(int st, int en, int n, bool bRepeat)
{
printf("%d permutation(%s): %d ~ %d\n", n, bRepeat?"repeat mode":"single mode", st, en);
int num = en - st + 1;
if(n > num)
{
bRepeat = true;
printf("too many number, to be repeat mode:\n");
} int *A = (int*)malloc(n*sizeof(int));
memset(A, 0, sizeof(n*sizeof(int)));
int cur = 0;
int number = Permutation(st, en, n, A, cur, bRepeat);
delete [] A ;
A = NULL;
printf("over!\n");
return number;
}

  

上一篇:java实现全排列输出


下一篇:推荐前端开发使用的服务器环境开源项目 D2Server 可替代Apache