zoukankan      html  css  js  c++  java
  • 组合数

    组合数

    时间限制:3000 ms  |  内存限制:65535 KB
    难度:3
    描述
    找出从自然数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 <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    int n, m, num, flag;
    int a[15], vis[15];
    #define mem(a) memset(a, 0, sizeof(a))
    
    void dfs(int n1, int f) {
    	a[f] = n1;
    	if (f == m) {
    		for (int i = 1; i<=m; i++)	cout << a[i];
    		cout << endl;
    		return ;
    	}
    	for (int i = n1-1; i>=1; i--) {
    		if (!vis[i]) {
    			//a[f] = i;
    			vis[i] = 1;
    			dfs(i, f+1);
    			vis[i] = 0;
    		}
    	}
    }
    
    int main() {
    	while (cin >> n >> m) {
    		for (int i = n; i>=m; i--) {
    			mem(a);
    			mem(vis);
    			dfs(i, 1);
    			//vis[i] = 0;
    		}
    	}
    	return 0;
    }
    另附上n的全排列代码:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    
    int a[15], vis[15], n;
    #define mem(a) memset(a, 0, sizeof(a))
    
    void dfs(int n1, int num) {
    	if (num == n+1) {
    		for (int i = 1; i<=n; i++)	cout << a[i];
    		cout << endl;
    		return ;
    	}
    	for (int i = 1; i<=n; i++) {
    		if (!vis[i]) {
    			vis[i] = 1;
    			a[num] = i;
    			dfs(i, num+1);
    			vis[i] = 0;
    		}
    	}
    }
    
    int main() {
    	while (cin >> n) {
    		
    		mem(a);
    		mem(vis);
    		dfs(n, 1);		
    	}
    }



  • 相关阅读:
    Java SSM 框架相关基础面试题
    JPanel JScrollPanel
    Spring MVC 的 Converter 和 Formatter
    JDesktopPane JInternalFrames
    Spring MVC 中的 forward redirect Flash属性
    Java Swing 中使用 EventQueue
    Java 中转换为String类型的四种方法
    Eclipse 安装使用 M2Eclipse 插件
    正则表达式
    Spring MVC 数据绑定和表单标签库
  • 原文地址:https://www.cnblogs.com/Tovi/p/6194778.html
Copyright © 2011-2022 走看看