[ACM_NYOJ_32]组合数
杰拉斯 | 时间:2013-05-05, Sun | 17,143 views编程算法
组合数
时间限制:3000 ms | 内存限制:65535 KB
描述
找出从自然数1、2、... 、n(0<n<10)中任取r(0<r<=n)个数的所有组合。
输入
输入n、r。
输出
按特定顺序输出所有组合。
特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列。
样例输入
5 3
样例输出
543 542 541 532 531 521 432 431 421 321
来源
代码如下:
#include<stdio.h> int a[10]; void backtrack(int n, int r, int k){ if(k >= r){ for(int i = 0; i < r; ++i){ printf("%d", a[i]); } printf("\n"); return; } for(int i = (k == 0 ? n : a[k - 1] - 1); i >= 1; --i){ a[k] = i; backtrack(n, r, k + 1); } } int main(){ int n, r; while(~scanf("%d%d", &n, &r)){ backtrack(n, r, 0); } return 0; }
如需转载请注明出处:杰拉斯的博客
当前暂无评论 »