排列组合问题
排列组合问题:1、输入n个数(不重复),求n个数字的全排列
如:n=3 全排列的数字为 1 2 3 则输出 123 132 213 231 321 312
2、输入n和k(n》=k)求n个数字的(n,k)排列
如n=3,k=2 输入的三个数位1 2 3 则输出 12 13 23
3、3、输入n个数(有重复),求n个数字的全排列
如:n=3 全排列的数字为1 1 2 则输出 112 121 211
#include<stdio.h>
static int num = 0;
void mySwap(int *a, int *b) {
int temp;
temp = *a;
*a = *b;
*b = temp;
}
void fullArray(int a[], int m, int n) {
int i;
if(m == n) {
for(i=0;i<n;i++) {
printf("%d ",a[i]);
}
num++;
printf("\n");
}
else {
for(i = m; i<n; i++) {
mySwap(&a[m],&a[i]);
fullArray(a,m+1,n);
mySwap(&a[m],&a[i]);
}
}
}
int main() {
int k=1,n,j=0,i=0;
int *array;
scanf("%d",&n);
array = (int *)malloc(sizeof(int)*n);
for(i=0;i<n;i++) {
array[i] = k;
k++;
}
printf("\n");
fullArray(array,0,n);
printf("一共有%d种排列\n",num);
return 0;
}
第一题做出来了,第二题有思路但是一直没实现啊,第三题没做出来啊啊。。。。求助!!