一个很难的程序难题,关于m选n

求一个m选n的算法,比如4选2,输出12 13 14 23 24 34
m选n的m和n要自由输入,怎么实现

http://bbs.csdn.net/topics/390550326

m选n的算法

经典算法题,你去搜索下能找到

这个就是数学里面的组合问题,百度下实现算法呗。

如何编写从M中选N的组合数程序

void print_subset(int cur,int m ,int n, int *A){
if(cur == n){ // 打印结果
for(int i = 0; i < cur; i++) printf("%d ", A[i]);
printf("\n");
return;
}
int s = cur?A[cur-1]+1:0;
for(int i = s; i < m; i++){
A[cur] = i;
print_subset(cur+1, m, n, A);
}
}

int main(){
int A[10];
print_subset(0,5,2,A);
return 0;
}


结果:
0 1
0 2
0 3
0 4
1 2
1 3
1 4
2 3
2 4
3 4

额,上面个格式弄错了,重新发一下:

void print_subset(int cur,int m ,int n, int *A){
    if(cur == n){ // 打印结果
        for(int i = 0; i < cur; i++) printf("%d ", A[i]);
        printf("\n");
        return;
    }
    int s = cur?A[cur-1]+1:0;
    for(int i = s; i < m; i++){
        A[cur] = i;
        print_subset(cur+1, m, n, A);
    }
}

int main(){
    int A[10];
    print_subset(0,5,2,A);
    return 0;
}