不容易系列(递归)

不容易系列之(4)——考新郎

Problem Description

国庆期间,省城HZ刚刚举行了一场盛大的集体婚礼,为了使婚礼进行的丰富一些,司仪临时想出了有一个有意思的节目,叫做"考新郎",具体的操作是这样的:

首先,给每位新娘打扮得几乎一模一样,并盖上大大的红盖头随机坐成一排;
然后,让各位新郎寻找自己的新娘.每人只准找一个,并且不允许多人找一个.
最后,揭开盖头,如果找错了对象就要当众跪搓衣板...

看来做新郎也不是容易的事情...

假设一共有N对新婚夫妇,其中有M个新郎找错了新娘,求发生这种情况一共有多少种可能.

Input

输入数据的第一行是一个整数C,表示测试实例的个数,然后是C行数据,每行包含两个整数N和M(1<M<=N<=20)。

Output

对于每个测试实例,请输出一共有多少种发生这种情况的可能,每个实例的输出占一行。

Sample Input

2

2 2

3 2

Sample Output

1

3

两种阶乘方式

1

 1 #include <stdio.h>
 2
 3 int main()
 4 {
 5     int n,a,b,i,j;
 6     __int64 s[22],h[22];
 7     s[1]=0;
 8     s[2]=1;
 9     s[3]=2;
10     for(i=4;i<21;i++)
11     {
12         s[i]=(i-1)*(s[i-1]+s[i-2]);
13     }
14     scanf("%d",&n);
15     while(n--)
16     {
17        scanf("%d%d",&a,&b);
18        h[0]=1;
19            for(j=1;j<22;j++){
20              h[j]=j*h[j-1];
21            }
22        printf("%I64d\n",h[a]/(h[a-b]*h[b])*s[b]);
23     }
24     return 0;
25 }

2

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 long long fac(long long  y)
 5 {
 6     if(y==0)
 7         return 1;
 8     if(y==1)
 9         return 1;
10     else
11         return y*fac(y-1);
12 }
13 int zu(int n,int m)
14 {
15     return fac(n)/(fac(m)*fac(n-m));
16 }
17 int main()
18 {
19     long long a[22];
20     int i,T;
21     a[1]=0,a[2]=1,a[3]=2;
22     for(i=4;i<=20;i++)
23         a[i]=(i-1)*(a[i-2]+a[i-1]);
24     cin>>T;
25     int N,M;
26     while(T--)
27     {
28         cin>>N>>M;
29         cout<<zu(N,M)*a[M]<<endl;
30     }
31     return 0;
32 }
时间: 2024-10-07 03:37:53

不容易系列(递归)的相关文章

汇编语言学习系列 递归实现

假如汇编语言要实现如下C语言的功能,编译环境Ubuntu14.04(32位). #include<stdio.h> int refact(int n){ if(n == 1) return 1; else return n * refact(n - 1); } int main(){ int a = 4; printf("%d\n", refact(a)); return 0; } 无论对于递归实现还是循环实现,汇编都是将转换为跳转语句实现.可以把上面的代码转换为 refa

spring源码分析6: ApplicationContext的初始化与BeanDefinition的搜集入库

先前几篇都是概念的讲解:回顾下 BeanDefinition 是物料 Bean是成品 BeanFactory是仓库,存储物料与成品 ApplicationContext初始化搜集物料入库,触发生产线,取出物料生产Bean 本文研究springboot环境下,ApplicationContext的初始化, 多是处理注解形式的Bean. 重要组件 1.PostProcessorRegistrationDelegate: 代理执行post processors的工具类 postProcessor分为两

HDU 2045 不容易系列之(3)—— LELE的RPG难题(递归/动态规划)

不容易系列之(3)—— LELE的RPG难题 Problem Description 人称“AC女之杀手”的超级偶像LELE最近忽然玩起了深沉,这可急坏了众多“Cole”(LELE的粉丝,即"可乐"),经过多方打探,某资深Cole终于知道了原因,原来,LELE最近研究起了著名的RPG难题: 有排成一行的n个方格,用红(Red).粉(Pink).绿(Green)三色涂每个格子,每格涂一色,要求任何相邻的方格不能同色,且首尾两格也不同色.求全部的满足要求的涂法. 以上就是著名的RPG难题.

原 Java学习之Xml系列二:xml按条件查询、xml递归遍历所有元素和属性

xml中加入了几条,为了方便查询时作为示例. 话不多说见代码注释: DTD文件:SwordTypeDefinition.dtd <?xml version="1.0" encoding="UTF-8"?> <!ELEMENT SwordLibrary (Sword*)> <!ELEMENT Sword (SwordName,Price,Attack)> <!ELEMENT SwordName (#PCDATA)> &l

[LeetCode系列]N皇后问题递归解法 -- 位操作方式

N皇后问题: 给定8*8棋盘, 放置n个皇后, 使其互相不能攻击(即2个皇后不能放在同一行/列/正反对角线上), 求解共有多少种放置方式? 这个问题的解答网上有不少, 但是位操作解法的我看到的不多. 下面贴出代码和图解, 也就不赘述了. 1 class Solution { 2 public: 3 /* 使用位操作实现的回溯算法. 按行扫描, 检测可以放置的列. 4 * 'limit' - 都是 '1'. 代表着所有列都被占据了 5 * 'h' - 是目前所有皇后列在行上的垂直投影. 如果 h=

[LeetCode系列]最大连续子列递归求解分析

本文部分参考Discuss: LeetCode. 步骤1. 选择数组的中间元素. 最大子序列有两种可能: 包含此元素/不包含. 步骤2. 步骤2.1 如果最大子序列不包含中间元素, 就对左右子序列进行步骤1. 步骤2.2 如果最大子序列包含, 则结果很简单, 就是左子列的最大后缀子列(即包含左子列最后一个元素--中间元素)加上右子列的最大前缀子列(即包含右子列第一个元素--中间元素) 步骤3. 返回三者中的最大值(左子列最大值, 右子列最大值, 二者拼接最大值). 1 class Solutio

2Python全栈之路系列之递归

Python全栈之路系列之递归 所谓递归其实就是函数本身调用函数,直到满足指定条件之后一层层退出函数, 例如 从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?"从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?'从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?--'" 利用函数编写一个斐波那契数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,

[LeetCode系列]爬梯问题的递归解法转换为迭代解法

有一个n阶的梯子, 你每次只能爬1阶或2阶, 请问共有多少种登顶的爬法?(正好爬完n阶, 不能多也不能少) 本题最优解是直接套用菲波那切数列即可(因为菲波那切数列的第n个元素正好等于第n-1个元素和第n-2个元素的和, 与本题的要求完全相同). 递归解法: 1 int climbStairs(int n) { 2 if (n < 3) return n; 3 return climbStairs(n-1) + climbStairs(n-2); 4 } 思路很清晰, 递归到当前阶数小于3阶时返回

[LeetCode系列] 二叉树最大深度求解问题(C++递归解法)

问: 给定二叉树, 如何计算二叉树最大深度? 算法描述如下: 如果当前节点为空, 返回0(代表此节点下方最大节点数为0) 如果当前节点不为空, 返回(其左子树和右子树下方最大节点数中的最大值+1) 上述算法的精髓在于递归调用中的终止条件. 代码如下: 1 /** 2 * Definition for binary tree 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNod

Python 之父的解析器系列之五:左递归 PEG 语法

原题 | Left-recursive PEG grammars 作者 | Guido van Rossum(Python之父) 译者 | 豌豆花下猫("Python猫"公众号作者) 声明 | 本翻译是出于交流学习的目的,基于 CC BY-NC-SA 4.0 授权协议.为便于阅读,内容略有改动. 我曾几次提及左递归是一块绊脚石,是时候去解决它了.基本的问题在于:使用递归下降解析器时,左递归会因堆栈溢出而导致程序终止. [这是我的 PEG 系列的第 5 部分.其它文章参见这个目录] 假设