有一个人写了n封信件,对应n个信封,然而粗心的秘书却把所有信件都装错了信封,那么一共有多少种装错的装法,用C++进行编译
时间: 2024-02-13 21:05:38 浏览: 18
这是一个经典的错排问题,可以使用递推公式进行求解。
C++代码如下:
```cpp
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
long long dp[21] = { 0, 0, 1 };
// dp数组表示i个信件错排的方案数
// dp[0]=0 表示0个信件没有错排方案
// dp[1]=0 表示1个信件没有错排方案
// dp[2]=1 表示2个信件错排有1种方案
for (int i = 3; i <= n; i++) {
dp[i] = (i - 1) * (dp[i - 1] + dp[i - 2]);
// dp[i]=(i-1)*(dp[i-1]+dp[i-2])
}
cout << dp[n] << endl;
return 0;
}
```
输入n表示有n个信件,输出它们错排的方案数。
注意,由于方案数可能很大,需要使用long long类型进行存储。
相关问题
伯努利装错信封问题c++
伯努利装错信封问题是一个经典的概率问题,即将n个信封装入n个信封,每个信封只能装一个信件。如果所有信件装入信封之后,恰好有k个信封装错了信件,那么求k个信封都装错信件的概率是多少?
这个问题的答案是1/n,即每个信封被随机分配到任何一个信封的概率都是1/n,因此每个信封被装错信件的概率也是1/n,所以恰好有k个信封都装错信件的概率是C(n,k)*(1/n)^k*(1-1/n)^(n-k)。其中C(n,k)表示从n个信封中选择k个信封的组合数。
如何制作一个自动打开信封效果的html页面
下面是一个简单的使用 CSS 和 JavaScript 实现自动打开信封效果的示例:
```html
<!DOCTYPE html>
<html>
<head>
<style>
/* 设置信封的样式 */
.envelope {
position: relative;
width: 300px;
height: 200px;
background-color: #fff;
border: 2px solid #333;
border-radius: 10px;
overflow: hidden;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
}
/* 设置信封上的盖子样式 */
.envelope:before {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 50px;
background-color: #fff;
transform-origin: top left;
transform: rotate(-45deg);
box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
}
/* 设置信封上的信封口样式 */
.envelope:after {
content: "";
position: absolute;
top: 48px;
left: 50%;
width: 100px;
height: 20px;
background-color: #fff;
border: 2px solid #333;
border-radius: 0 0 10px 10px;
transform: translateX(-50%);
box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
}
/* 设置信封里面的信件样式 */
.letter {
position: absolute;
top: 50px;
left: 0;
width: 100%;
height: calc(100% - 50px);
background-color: #f7f2e7;
padding: 20px;
box-sizing: border-box;
transform-origin: top;
transform: rotateX(90deg);
transition: transform 1s;
}
/* 设置打开信封的动画 */
.envelope.open .letter {
transform: rotateX(0);
}
</style>
</head>
<body>
<div class="envelope" onclick="this.classList.add('open')">
<div class="letter">
<p>这是一封信,内容在这里。</p>
</div>
</div>
</body>
</html>
```
在上面的代码中,我们首先设置了一个 envelope 类的 div 元素作为信封的容器,并设置了它的样式,包括宽度、高度、背景颜色、边框、圆角、溢出隐藏和阴影等属性。然后使用 :before 和 :after 伪元素分别表示信封上的盖子和信封口,并设置它们的样式。接着,使用一个 letter 类的 div 元素表示信封里面的信件,并设置它的样式,包括宽度、高度、背景颜色、内边距、盒模型和旋转等属性。最后使用 JavaScript 给 envelope 元素添加一个 click 事件处理函数,当用户点击信封时,给 envelope 元素添加一个 open 类,触发打开信封的动画效果。