hpu-1690-CZY的组合数烦恼

简介: hpu-1690-CZY的组合数烦恼


题目描述

czy最近对组合数产生了浓厚的兴趣,一天他心血来潮,想排n个数字,但是很快他发现种类太多了,于是他决定从中随机找出m个数排,但还是太多了,所以他想请聪明的你写个程序帮助他找到所有种类的排列

输入

输入包括多组测试数据,每组包括一行整数n(1<=n<10),m(1<=m<=n),空格间隔

输出

按特定顺序输出所有组合。

特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列。

样例输入

5 3

样例输出

543

542

541

532

531

521

432

431

421

321


题目分析:

还是全排列问题就是在控制排列的方式不一样

     点击这里   看看这个从小到大排列   和这个有什么区别  本博客另一个全排列问题可以参考一下

#include<cstdio>
#include<cstring>
#define INF 0xfffffff
int mark[20],a[20],arr[20];
int n,m;
void dfs(int v)
{
  if(v>m)  //  这里控制输出多少位
  {
    for(int i=1;i<=m;i++)
    printf("%d",a[i]);
    printf("\n");
    return ;
  }
  else
  {
    for(int i=n;i>=1;i--)
    {
      a[v]=i;//   和从小到大的主要区别就在这  那个是把这个放到if语句里面的  这个是先赋值后判断
      if(!mark[i]&&a[v]<a[v-1])
      {
        mark[i]=1;
        dfs(v+1);
        mark[i]=0;
      }
    }
  }
}
int main()
{
  while(~scanf("%d%d",&n,&m))
  {
    memset(mark,0,sizeof(mark));
    a[0]=INF;
    dfs(1);
  }
  return 0;
}





目录
相关文章
|
4月前
1037 在霍格沃茨找零钱
1037 在霍格沃茨找零钱
|
机器学习/深度学习 人工智能 自然语言处理
【每周一坑】三国演义中谁的存在感最强 +【解答】暴力计算圆周率
当然,精确统计是比较复杂的,比如同样是刘备,可以是 刘备、玄德、刘豫州、刘皇叔、使君、先主、备,而同样的 主公、丞相、将军 这些称谓在不同语境下指的又是不同的人。这里我们就只粗略算个大概即可,统计哪些个名字出现次数最多。你可以尽量让结果更接近实际值。
|
机器学习/深度学习 算法 索引
算法步步为营(1)-两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。可以按任意顺序返回答案。
80 0
|
存储 算法 vr&ar
算法步步为营(02)-两数之和
两个非空链表,表示两个非负整数。它们每位数字都是逆序存储,且每个节点只能存储一位数字。 将两个数相加,并以相同形式返回一个表示和的链表。除了数字 0 之外,这两个数都不会以 0 开头。
96 0
|
算法 Go
算法练习第五天——有效数独
请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)
算法练习第五天——有效数独
|
人工智能 BI 索引
刷爆力扣之构建乘积数组
刷爆力扣之构建乘积数组
刷爆力扣之构建乘积数组
|
SQL 算法 数据挖掘
【边学边敲边记】LeetCode007:最接近的三数之和
【边学边敲边记】LeetCode007:最接近的三数之和
【边学边敲边记】LeetCode007:最接近的三数之和
|
算法 C语言
假币问题:有n枚硬币,其中有一枚是假币,已知假币的重量较轻。现只有一个天平,要求用尽量少的比较次数找出这枚假币。
(2)当n为奇数时,将前后两部分,即1…n,放在天平的两端,较轻的一端里有假币,继续在较轻的这部分硬币中用同样的方法找出假币;若两端重量相等,则中间的硬币,即第 (n+1)/2枚硬币是假币。n,放在天平的两端,较轻的一端里有假币,继续在较轻的这部分硬币中用同样的方法找出假币;假币问题:有n枚硬币,其中有一枚是假币,已知假币的重量较轻。:因为30位偶数,所以至少要被分一次,然后成为奇数之后,那个假币就是奇数的中位数,所以只需要2次。若输入的硬币数为30,则最少的比较次数为(2),最多的比价次数为(4)。
497 0