首页 > 其他分享 >错排公式

错排公式

时间:2022-12-05 12:32:29浏览次数:68  
标签:int 公式 LL 元素 times 错排

错排公式

错排问题最早被 尼古拉·伯努利和欧拉 研究,因此历史上也称为伯努利-欧拉的装错信封的问题。这个问题有许多具体的版本,如在写信时将\(n\)封信装到\(n\)个不同的信封里,有多少种全部装错信封的情况?又比如四人各写一张贺年卡互相赠送,有多少种赠送方法?自己写的贺年卡不能送给自己,所以也是典型的错排问题。

举例

十本不同的书放在书架,现重新摆放,使得每本书都不在原来的位置上,有几种摆法?
一个人给十个同学写信,但他把所有的信都装错了信封,问共有多少种错误的方式?

​神、上帝以及老天爷​

错排公式_错排

解题思路

做这道题刚开始没有什么头绪,后来上网查了一下才发现原来有一个错排公式,也就是元素都不在对应原来位置的方法数。公式为:

\[\large f(n) = (n-1) \times (f(n-2) + f(n-1)) \]

推导过程

第一步:假如一共有\(n\)个元素,那么如果把 第\(n\)个元素 放在某一个位置\(k\)处,一共有\(n-1\)种方法(除去位置\(n\)可不就是有\(n-1\)个吗~);

第二步:放编号为\(k\)的元素有两种情况:

  • 如果把它放到位置\(n\),那么除了\(n\)和\(k\)元素外的\(n-2\)个元素一共有\(f(n-2)\)种方法
  • 如果不把它放到位置\(n\),那么对于剩下的\(n-1\)个元素有\(f(n-1)\)种方法

综上所述,错排公式为:

\[\large f(n) = (n-1) \times (f(n-2) + f(n-1)) \]

有了错排公式,这道题就很容易解决了,总的排列方法数有\(n\)的阶乘个,而全部错排的方法数有 \((n-1)\times (f(n-1) + f(n-2))\)个,最后直接把错排方法数除以总的排列数,然后注意输出格式就可以了。

#include <bits/stdc++.h>
using namespace std;
const int N = 110;
typedef long long LL;
LL f[N], sum;
// f(n)=(n-1)*(f(n-1)+f(n-2))
int main() {
int m;
scanf("%d", &m);

while (m--) {
int n;
scanf("%d", &n);
// base case
sum = 1;
f[1] = 0, f[2] = 1;

//递推出错排次数
for (int i = 3; i <= n; i++)
f[i] = (i - 1) * (f[i - 1] + f[i - 2]);

//总次数
for (int i = 1; i <= n; i++) sum = sum * i;

//比率
printf("%.2lf%%\n", (double)f[n] / sum * 100);
}
return 0;
}

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

错排公式_i++_02

将总数为\(n\)个人的一队人,将选错新娘的放在一起则构成一个 全错排列,将选对的\(n-m\)个新郎放在一起成为一个排列,则可能出现的总数为正确的排列情况*全错排的情况

复习一下组合数公式:

\[\large C_a^b=\frac{a!}{b!\times (a-b)!} \]

#include <iostream>
using namespace std;
typedef long long LL;

LL C(int a, int b) {
LL sum1 = 1, sum2 = 1;
for (int i = b + 1; i <= a; i++) sum1 *= i;
for (int i = 1; i <= a - b; i++) sum2 *= i;
return sum1 / sum2;
}
int main() {
LL f[21] = {0, 0, 1}; //这个初始化很牛B的样子,放过头雁打二雁,而且f[1]=0,f[2]=1
//错排公式,预处理
for (int i = 3; i < 21; i++) f[i] = (i - 1) * (f[i - 1] + f[i - 2]);

int T;
cin >> T;
while (T--) {
int n, m;
cin >> n >> m;
cout << C(n, m) * f[m] << endl;
}
return 0;
}



标签:int,公式,LL,元素,times,错排
From: https://blog.51cto.com/u_3044148/5911896

相关文章

  • 4.1 数列的概念1(概念、通项公式)
    \({\color{Red}{欢迎到学科网下载资料学习}}\)[【基础过关系列】高二数学同步精品讲义与分层练习(人教A版2019)](https://www.zxxk.com/docpack/2875423.html)\({\col......
  • Word中大括号内公式如何对齐
    写开题报告写得恶心,word的格式(源于n年前的模板)需要不断修改,公式也需要一行一行自己写,吐槽一波...大括号内往往需要写几行公式,如下:可见我的括号是在中间对齐,我们只需要在......
  • 5.5.1 两角和与差的正弦、余弦和正切公式 (2)
    \({\color{Red}{欢迎到学科网下载资料学习}}\)【基础过关系列】2022-2023学年高一数学上学期同步知识点剖析精品讲义(人教A版2019)\({\color{Red}{跟贵哥学数学,so\qua......
  • 代编写选股公式 交易模型 指标公式 主图指标 副图指标 定制
    通达信超牛主图指标公式、通达信ene主图指标公式、通达信主图指标公式大全、通达信最牛最全主图指标公式、通达信趋势线主图指标公式、通达信精美主图指标公式......
  • 代编程序化交易模型,代编写公式指标,定制交易策略
    有思路,想编写各种指标公式,交易模型,选股公式,还原公式的朋友可联系技术人员QQ:262069696或微信:cxh99cxh99进行有偿收费编写!(注:由于人数限制,QQ或微信请选择方便的一个......
  • 《尧驰质数判定公式》 回复
    《尧驰质数判定公式》     https://tieba.baidu.com/p/8168528921      22楼质数判定公式?这是重大成果吧?  多项式之父:这个公式只是预选公......
  • 5.3 诱导公式
    \({\color{Red}{欢迎到学科网下载资料学习}}\)【基础过关系列】2022-2023学年高一数学上学期同步知识点剖析精品讲义(人教A版2019)\({\color{Red}{跟贵哥学数学,so\qua......
  • C#-简易公式计算器代码实现
    计算器如图所示,仅实现加减乘除及括号功能,公式错误时会有提示。首先建立一个inputList,每点击数据一下,便将内容添加至inputList中,点击后退时则删除List中最后一个元素。......
  • 公式
    1.导数公式 2.等价无穷小  ......
  • 贝叶斯公式的应用
    贝叶斯公式如何应用?以医学领域为例。医学检测通常以检测结果是阳性或阴性来初步断定受试者是否患病。在现实世界中,测试很少是完全可靠的,会出现假阳性和假阴性的问题。假设一......