NYOJ---题目32组合数

组合数

时间限制: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
来源
[苗栋栋]原创
上传者

苗栋栋

分析:这是一道DFS的题,代码如下:

#include<iostream>
#include<stdio.h>
#include<queue>
#include<string.h>
using namespace std;
int n,r;
int vis[100];
int a[100];
void dfs(int n,int count1,int r)
{
    if(count1>r)
        return ;

    for(int i=n;i>=1;i--)
    {
        if(!vis[i])
        {
            a[count1]=i;
            vis[i]=1;
             if(count1==r)
            {
                for(int i=1;i<=r;i++)
                    printf("%d",a[i]);
                printf("\n");
            }

          dfs(i,count1+1,r);
            vis[i]=0;

        }
    }
}
int main()
{
    while(cin>>n>>r)
    {
        memset(vis,0,sizeof(vis));
        dfs(n,1,r);
    }
}
时间: 2024-12-23 07:21:21

NYOJ---题目32组合数的相关文章

nyoj 32 组合数

组合数 时间限制: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<cstrin

nyoj 32 组合数【简单dfs】

组合数 时间限制: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<stdio.h> #include<string.

nyoj 32 组合数 (深搜,不错,好题)

组合数 时间限制: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 来源 [苗栋栋]原创 上传者 苗栋栋 与我之前做的方法不相同,以前的是直接将所有的可

NYOJ题目74小学生算术

-------------------------------- 模拟加法过程即可. AC代码: 1 import java.io.BufferedReader; 2 import java.io.IOException; 3 import java.io.InputStreamReader; 4 5 public class Main { 6 7 public static void main(String[] args) throws NumberFormatException, IOExc

NYOJ题目1051simone牌文本编辑器

---------------------------------------- 题目评论中有说使用KMP反倒超时的... 外加看到匹配串长度不超过10,最大也不过是10000^10,这点计算量cpu表示没问题. 所以,就是用傻傻的模拟....不愧是水题,竟然AC了.... AC代码: 1 import java.util.Scanner; 2 3 public class Main { 4 5 public static void main(String[] args) { 6 7 Scann

NYOJ题目62笨小熊

----------------------------- 水题,没啥好说的. 还是有点感悟,很多时候所谓评价是很不客观的,凡事一定要有自己的想法. AC代码: 1 import java.util.Scanner; 2 3 public class Main { 4 5 public static void main(String[] args) { 6 7 Scanner sc=new Scanner(System.in); 8 9 int times=Integer.parseInt(sc

NYOJ题目1045看美女

-------------------------------------- 开始的时候蠢蠢的使用直白的模拟: 1 import java.util.Scanner; 2 3 public class Main { 4 5 public static void main(String[] args) { 6 7 Scanner sc=new Scanner(System.in); 8 9 int times=sc.nextInt(); 10 while(times-->0){ 11 12 int

NYOJ题目889求距离

------------------------------------------ 题目可以抽象一下为计算坐标系上两点间的距离,即 AC代码: 1 import java.awt.Point; 2 import java.io.BufferedReader; 3 import java.io.IOException; 4 import java.io.InputStreamReader; 5 6 public class Main { 7 8 public static void main(S

NYOJ题目845无主之地1

----------------------------------------- 这道题有坑,就是打印的顺序必须是和输入的顺序一致,这就是他所谓的不排序的意思,瞬间将复杂度提高出题人真是“好水平”.... AC代码: 1 import java.util.ArrayList; 2 import java.util.List; 3 import java.util.Scanner; 4 5 public class Main { 6 7 public static void main(Strin

NYOJ题目769乘数密码

----------------------------------------- 这道题目是有一点小技巧的,因为取模运算没办法还原所以只好计算所有存储起来然后找映射,但是存储数据的使用场景是解密,再存储从明文到密文的映射就不太合适了,于是就存储从密文到明文的映射,这样子的话解密的时候就可以线性的从密文到明文. AC代码: 1 import java.io.BufferedReader; 2 import java.io.IOException; 3 import java.io.InputSt