2021-02-26

杭电2048(c语言)题解

2021-02-26_第1张图片

这是一道错排题

错排公式:D(M)=(M-1)*(D[M-1+D[M-2])

思路

用错排除以总的可能数

代码

#include 
#include 

int main()
{
    int n,i;
    int a;
    scanf("%d",&n);
    while(n--)
    {
        long long int d[24]={0,0,1,2},c=2;
        scanf("%d",&a);
        for(i=3;i<=a;i++)
        {
            d[i]=(i-1)*(d[i-1]+d[i-2]);//错排
            c=c*i;//总的可能数
        }
        printf("%.2f%%\n",d[a]*100.0/c);
    }
    return 0;
}

注意事项

  • c(总共的可能性)一定定义long long

  • i要从3开始(一开始我是从2开始的,结果老是不对)

    2021-02-26_第2张图片

若有更好的解法,或者更简洁的解法,还请大佬多多指教。

你可能感兴趣的:(c语言)