全错位排列
时间:2022-04-27
本文章向大家介绍全错位排列,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
全错位排列是由著名数学家欧拉提出的。
最典型的问题是装错信封问题
一个人写了n封不同的信及相应的n个不同的信封,他把这n封信都装错了信封,问都装错信封的装法有多少种?
用a、b、c,d……表示n份相应的写好的信纸,A、B、C,D……表示写着n位友人名字的信封,错装的总数为记作f(n)。
假设把a错装进B中,然后接下来我们可以分为两种情况,
第一种是b错装进了A中,那么问题就变为c,d,e…..n-2个信纸放入C,D,E……n-2个信封时完全放错时完全装错有多少种,有f(n-2)种
第二种是b错装进了除A之外的一个信封内,这个时候问题就相当于已知a错装进B中,将b,c,d,e…..n-2个信纸放入A,C,D,E……n-2个信封时,b不能放入A中,这里如果我们把A
想象成B0的话,就相当于将b,c,d,e…..n-2个信纸放入B0,C,D,E……n-2个信封时完全放错,有f(n-1)种
a错装进B中,有f(n-1)+f(n-2)种,同样a错装进C中也有f(n-1)+f(n-2)种…..
a错装进B中,有f(n-1)+f(n-2)种
a错装进C中,有f(n-1)+f(n-2)种
a错装进D中,有f(n-1)+f(n-2)种
a错装进E中,有f(n-1)+f(n-2)种
a错装进F中,有f(n-1)+f(n-2)种
…
所以一共有
f(n)=(n-1)(f(n-1)+f(n-2));
//C++示例代码
#include <iostream>
using namespace std;
long long getvalue(int num)
{
if (num == 1)
{
return 0;
}
else if (num == 2)
{
return 1;
}
else if (num == 3)
{
return 2;
}
else
{
long long f1 = 1;
long long f2 = 2;
for (int i = 4; i <= num; i++)
{
long long t = f2;
f2 = (i - 1)*(f1 + f2);
f1 = t;
}
return f2;
}
}
int main()
{
int num;
cout << "input the number of envelop with -1 to end" << endl;
while (cin>>num)
{
if (num == -1)
break;
long long r = getvalue(num);
cout<<"Result:" << r << endl;
}
return 0;
}
相关的题目有
http://acm.hdu.edu.cn/showproblem.php?pid=2049
假设一共有N对新婚夫妇,其中有M个新郎找错了新娘,求发生这种情况一共有多少种可能.
http://acm.hdu.edu.cn/showproblem.php?pid=2048
神,上帝和老天爷
- android SurfaceView绘制实现原理解析
- AbstractQueuedSynchronizer实现示例
- PyQt的一个UI单元测试框架思路
- Spring Cloud Zuul实现动态路由
- android应用资源预编译,编译和打包全解析
- Python优雅地dumps非标准类型
- html5标签基础
- 彻底搞懂Gradle、Gradle Wrapper与Android Plugin for Gradle的区别和联系
- 社会化分享
- Android真机安装sqlite3的方法
- 二次元世界的Linux—东方Project之B站掠影
- 带三方登录(qq,微信,微博)
- Android Studio移动鼠标显示悬浮提示的设置方法
- Spring Cloud构建微服务架构:服务注册与发现
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 常见编程模式之合并区间
- chmod 777 是开发的常规操作吗?
- 手把手教你进行Anaconda的安装
- 浅析Python基础知识之面向对象
- 手把手教你用Python进行SSH暴力破解
- 一文学会注解的正确使用姿势
- 面试官:请算出走迷宫需要的最少步数
- lua执行redis脚本找不到脚本的问题
- Android |《看完不忘系列》之dagger
- Android | dagger细枝篇
- ES UpdateByQuery Java Api
- [Bazel]repository_rule() vs rule()
- Windows 系统信息收集姿势
- 小白学PyTorch | 3 浅谈Dataset和Dataloader
- 小白学PyTorch | 4 构建模型三要素与权重初始化