nyoj 32 组合数
2013-10-30 15:52
309 查看
描述
找出从自然数1、2、... 、n(0<n<10)中任取r(0<r<=n)个数的所有组合。
输入输入n、r。
输出按特定顺序输出所有组合。
特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列。
样例输入
样例输出
找出从自然数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 s[10] = {0}, a[10]; int j = 0,flag = 0;; void PaiLie(int k, int n, int m) { int i = 0, l; if((j - 1) == m) { for(l = 0; l < m; l++) { if(a[l] < a[l + 1]) { flag = 1; break; } } if(flag == 0) { for(l = 0; l <= m; l++) printf("%d", a[l]); printf("\n"); } flag = 0; } else { for(i = n; i >= 0; i--) { if(s[i] == 0) { s[i] = 1; a[j++] = i + 1; PaiLie(i, n, m); j--; s[i] = 0; } else continue; } } } int main() { int n, m; scanf("%d%d", &n, &m); PaiLie(0, n - 1, m - 1); return 0; }