2 hehualee hehualee 于 2016.01.23 09:31 提问

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

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

7个回答

caozhy
caozhy   Ds   Rxr 2016.01.23 09:34
已采纳
wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.01.23 11:31

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

91program
91program   Ds   Rxr 2016.01.23 10:48
Mr_dsw
Mr_dsw   Ds   Rxr 2016.01.23 11:13

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

enpterexpress
enpterexpress   2016.01.23 14:14
coderCold
coderCold   2016.01.28 20:28

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

coderCold
coderCold   2016.01.28 20:30

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

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;
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!