C r and n(组合数)
2016-04-16 17:43
239 查看
找出n个数的r个数的组合,如下形式:
输入:n,r分别为 5, 3
输出: 5 4 3
5 4 2
5 4 1
5 3 2
5 3 1
5 2 1
4 3 2
4 3 1
4 2 1
3 2 1
分析:我的思路如下,用增量构造法,生成一个子集,用if语句判断是否符合r个数,若为真,则输出结果。按题目要求,子集要倒序输出,所以要将模型的for循环改为由n-1到0,输出时再统一加上1。
输入:n,r分别为 5, 3
输出: 5 4 3
5 4 2
5 4 1
5 3 2
5 3 1
5 2 1
4 3 2
4 3 1
4 2 1
3 2 1
分析:我的思路如下,用增量构造法,生成一个子集,用if语句判断是否符合r个数,若为真,则输出结果。按题目要求,子集要倒序输出,所以要将模型的for循环改为由n-1到0,输出时再统一加上1。
#include<cstdio> #include<cstdlib> using namespace std; void sub(int n,int *a,int cur,int r) { if(cur==r){ for(int i=0;i<cur;i++)printf("%d ",a[i]+1); putchar('\n'); return; } int s=cur?a[cur-1]-1:n-1; for(int i=s;i>=0;i--){ a[cur]=i; sub(n,a,cur+1,r); } } int main() { int n,r,a[101]; scanf("%d%d",&n,&r); sub(n,a,0,r); return 0; }
相关文章推荐
- siegen程计算机常用术语解析之依赖注入。
- listView优化以及内存泄露问题
- 预显示TextView
- Ubuntu 14.04 安装 tomcat
- javascript对象继承详解
- 每天一个linux命令(6):cp
- Linux per_cpu机制的详解
- mybatis中使用in查询时的注意事项
- sublime快捷键大全
- C++程序提高运行速度的方法
- 剑指offer 面试题15: 链表中倒数第k个结点 题解
- Quartz.NET配置
- I2C总线EEPROM实现
- LeetCode——031
- 【NOIP practice】BSOJ2264 火炬 基础算法+思考题
- jQuery.qrcode生成二维码
- JAVA第五次作业
- 关于浏览器破图宽度显示28像素的问题
- 交通灯管理系统
- Android 4.0以后主线程访问网络问题