nyoj-组合数
来源:互联网 发布:js 日期控件 编辑:程序博客网 时间:2024/06/06 08:55
组合数
- 描述
- 找出从自然数1、2、... 、n(0<n<10)中任取r(0<r<=n)个数的所有组合。
- 输入
- 输入n、r。
- 输出
- 按特定顺序输出所有组合。特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列。
- 样例输入
5 3
- 样例输出
543542532541531431521432421321
组合数
- 描述
- 找出从自然数1、2、... 、n(0<n<10)中任取r(0<r<=n)个数的所有组合。
- 输入
- 输入n、r。
- 输出
- 按特定顺序输出所有组合。特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列。
- 样例输入
5 3
- 样例输出
543542532541531431521432421321
组合数
- 描述
- 找出从自然数1、2、... 、n(0<n<10)中任取r(0<r<=n)个数的所有组合。
- 输入
- 输入n、r。
- 输出
- 按特定顺序输出所有组合。特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列。
- 样例输入
5 3
- 样例输出
- 543542532541531431521432421321
思路:
这是一道搜索题,和全排列差不多,只不过对数字的输出多加了一些要求,
首先找到结束条件,即step=m+1,该题要求降序输出,所以可以从n开始搜索,即存入数组,
该题的判断条件即:该数未用过,且该数比前面一个数小。代码:
#include<stdio.h>int a[10],book[10],n,m;void dfs(int step){int i;if(step==m+1)//结束条件 {for(i=1;i<=m;i++){printf("%d",a[i]);}printf("\n");return;}for(i=n;i>0;i--){if(book[i]==0&&(a[step-1]>i))//未用过且前面一个数大于i {a[step]=i;//把数存进数组里 book[i]=1;//标记已经用过该数 dfs(step+1);//搜索下一个 book[i]=0;//取消标记 }}return;}int main(){scanf("%d%d",&n,&m);a[0]=999999;dfs(1);return 0;}
0 0
- NYOJ - 组合数
- 组合数 nyoj
- NYOJ 32 组合数
- NYOJ-组合数-32
- nyoj 32-组合数
- NYOJ,32,组合数
- nyoj 32 组合数
- nyoj-32-组合数
- nyoj 32 组合数
- NYOJ-32组合数
- nyoj 组合数
- nyoj 组合数
- nyoj 32 组合数
- NYOJ 32 组合数
- nyoj--32--组合数
- NYOJ 32 组合数
- NYOJ-组合数
- NYOJ-组合数-32
- iOS中的浅复制与深复制
- markdown中图片的相关设置
- 40个Java多线程问题总结
- Easy 4 Roman to Integer(13)
- 为推动CSDN免积分下载资源而努力
- nyoj-组合数
- POJ 1170 Shopping Offers 状态压缩dp+完全背包
- echarts如何让折线图的每个折点都显示数值?
- 前端面试题之汇总
- F
- linux 下 curses库 安装 和使用
- 小游戏的processing实现
- 概率与数理统计学习图
- CSS