zoukankan      html  css  js  c++  java
  • GHOJ 397 错排问题

    题目描述

            某人写了n封信和n个信封,如果所有的信都装错了信封,共有多少种不同情况?

    输入输出格式

    输入格式

            一行,一个整数n(n≤10)。

    输出格式

            一行,为所有的情况数。

    输入输出样例

    输入样例

    4

    输出样例

    9

     

    题解

            现在假设有$i$封信需要处理。

            当第$i$封信放在$[1,i)$中的第$j$个信封时,如果第$j$封信放到了第$i$个信封中,我们其实可以把当前情况下的情况数看做只有$(i-2)$封信的情况数。

            但如果第$j$封信放在了$[1,i)$中的第$k$个信封时,其实我们可以把第$i$个信封看做第$j$个信封,忽略实际已放了第$i$封信的第$j$个信封,这样我们就可以把当前的情况数看做只有$(i-1)$封信的情况数。

            这样就可以得到递推式:$a[i]=(i-1) imes(a[i-1]+a[i-2])$。

    #include <iostream>
    
    using namespace std;
    
    int n;
    int a[11] = {0,0,1,2};
    
    int main()
    {
        cin >> n;
        for(int i = 4; i <= n; i++)
        {
            a[i] = (i - 1) * (a[i - 1] + a[i - 2]); 
        }
        cout << a[n];
        return 0;
    }
    参考程序
  • 相关阅读:
    本机mysql 5.7服务启动后停止,某些服务在未有其他应用程序使用时停止
    java数据结构 • 面向对象 • 异常 • 随机数·时间
    获取对象信息
    集合的运算律
    常用的逻辑符号
    未解决问题
    继承和多态
    访问权限
    类和实例
    第三方模块安装
  • 原文地址:https://www.cnblogs.com/kcn999/p/10661679.html
Copyright © 2011-2022 走看看