求一个m选n的算法,比如4选2,输出12 13 14 23 24 34
m选n的m和n要自由输入,怎么实现
http://bbs.csdn.net/topics/390550326
经典算法题,你去搜索下能找到
这个就是数学里面的组合问题,百度下实现算法呗。
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;
}