年会抽奖(NK)

#include<iostream>
using namespace std;
int main()
{
    long long a[21]={0};
    a[0]=0,a[1]=0,a[2]=1;
    long long b[21]={0};
    b[0]=0,b[1]=1,b[2]=2;
    for(int i=3;i<21;i++)
    {
        a[i]=(i-1)*(a[i-1]+a[i-2]);
        b[i]=i*b[i-1]; 
    }
    int n;
    while(cin>>n)
    {
      printf("%.2f%%\n", 100.0*a[n] /b[n]);
    }
    return 0;
}

// 使用递归思想 数组a表示前n个人都拿错的情况,a肯定没拿自己名字,即共有n-1种可能拿错,其中假设a拿了b的且b拿了a的,那么就等于算n-2个人都拿错的情况,对于b来说也可能没拿a的,那么就等于计算n-1个人都拿错的情况

//数组b表示n的全排列 即所有可能拿的情况

// "%.2f%%"用于类似50.00%输出格式 %%表示"%"

发布了81 篇原创文章 · 获赞 1 · 访问量 2736

猜你喜欢

转载自blog.csdn.net/weixin_44781382/article/details/105330758