组合数
来源:互联网 发布:佳明软件下载 编辑:程序博客网 时间:2024/05/01 18:39
原题链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=32
组合数
时间限制:3000 ms | 内存限制:65535 KB
难度:3
- 描述
- 找出从自然数1、2、... 、n(0<n<10)中任取r(0<r<=n)个数的所有组合。
- 输入
- 输入n、r。
- 输出
- 按特定顺序输出所有组合。
特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列。 - 样例输入
5 3
- 样例输出
543542541532531521432431421321
#include <stdio.h>void dfs(int n, int r ,int v){//n代表一个数的一位数,r代表剩余位数,v代表一组和好的数 if(r == 0){//当r为0时v已经是组合好的三位数 printf("%d\n", v);return ;}if(n == 0)return;//此为失败的出口,如果n==0而r>0,则组合失败 dfs(n - 1, r - 1, v * 10 + n);//加上n,根据题目要求需要n递减进行组合,并且要从n开始,故此语句不能与下一条调换位置 dfs(n - 1, r, v);//没加n }int main(){int m, n;while(~scanf("%d%d", &n, &m))dfs(n, m, 0);return 0;}
//代码2 #include <stdio.h>void fun(int n,int r,int v){if(r == 0){printf("%d\n",v);return ;}for(int i = n;i >= r;i -- )fun(i - 1 ,r - 1 ,v * 10 + i);}int main(){int n,r;while(~scanf("%d%d",&n,&r))fun(n,r,0);return 0;}
#include <stdio.h>int vis[10];int n, m;void fun(int s, int r){if(r == 0){for(int i = m;i > 0;i --)printf("%d", vis[i]);printf("\n");return ;}for(int i = s;i >= r;i --){vis[r] = i;fun(i - 1, r - 1);}}int main(){while(~scanf("%d%d", &n, &m))fun(n, m);return 0;}
0 0
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 组合数
- 如何对Andrioid进行单元测试
- 域名的优化
- JPA的Embeddable注解
- 紫书搜索 习题7-10 UVA
- 解决小程序中Data.parse()获取时间戳IOS不兼容
- 组合数
- OpenGL概述
- 编译器的工作过程
- golang线程同步WaitGroup简介
- 射频识别技术漫谈(12)——三次相互认证
- webpack 浅析 --命令行安装编译
- 用C#和SQL实现课程信息管理系统(华工软院复试题练习)
- 解决公务车Bug:公安违章管理中编辑新增的公安违章记录,点击保存按钮报:数据库操作异常,null
- 题目1079:手机键盘答案