zoukankan      html  css  js  c++  java
  • hdu 2048 数学题

    这道题可以认为是一道纯数学题,我居然半天没推出公式,最后参考了一下别人的解题报告才想清楚,汗颜啊~~

    N张票的所有排列可能自然是Ann = N!种排列方式
    现在的问题就是N张票的错排方式有几种。
    首先我们考虑,如果前面N-1个人拿的都不是自己的票,即前N-1个人满足错排,现在又来了一个人,他手里拿的是自己的票。
    只要他把自己的票与其他N-1个人中的任意一个交换,就可以满足N个人的错排。这时有N-1种方法。

    另外,我们考虑,如果前N-1个人不满足错排,而第N个人把自己的票与其中一个人交换后恰好满足错排。
    这种情况发生在原先N-1人中,N-2个人满足错排,有且仅有一个人拿的是自己的票,而第N个人恰好与他做了交换,这时候就满足了错排。
    因为前N-1个人中,每个人都有机会拿着自己的票。所以有N-1种交换的可能。

    综上所述:f(n) = (i - 1) * [f(n - 1) + f(n - 2)]

    当然最后打完代码后运行一看,发现题目要求保留两位小数,这样的话当n > 6的时候所有的结果都是一样的了(显然嘛,当n无限增大的时候概率会趋于一个稳定值的)

    /*
    * hdu2048/linux.c
    * Created on: 2011-7-25
    * Author : ben
    */
    #include
    <stdio.h>
    #include
    <stdlib.h>
    #include
    <string.h>
    #include
    <math.h>

    void work();
    int main() {
    #ifndef ONLINE_JUDGE
    freopen(
    "data.in", "r", stdin);
    #endif
    work();
    return 0;
    }

    void work() {
    int T, i;
    double table[10] = { 0, 0, 50, 33.33, 37.5, 36.67, 36.81 }, ans;
    scanf(
    "%d", &T);
    while (T--) {
    scanf(
    "%d", &i);
    if(i < 7) {
    ans
    = table[i];
    }
    else {
    ans
    = 36.79;
    }
    printf(
    "%.2f%%\n", ans);
    }
    }
  • 相关阅读:
    Android AHandle AMessage
    android java 与C 通过 JNI双向通信
    android 系统给应用的jar
    UE4 unreliable 同步问题
    UE4 difference between servertravel and openlevel(多人游戏的关卡切换)
    UE4 Run On owing Client解析(RPC测试)
    UE4 TSubclassOf VS Native Pointer
    UE4 内容示例网络同步Learn
    UE4 多人FPS VR游戏制作笔记
    UE4 分层材质 Layerd Materials
  • 原文地址:https://www.cnblogs.com/moonbay/p/2116407.html
Copyright © 2011-2022 走看看