HDU 2048神、上帝以及老天爺
題目鏈接如上,該題主要涉及錯位排列的知識!我看了一下別人的博客講解錯位排列的知識,我覺得不太好懂!今天我就用我自己的理解來幫助大家!
1總排列情況個數爲n!(這應該可以理解的)
錯位排列情況個數:
實在不能理解的推薦嗶哩嗶哩視頻或者自行搜素其他教程視頻
https://www.bilibili.com/video/BV1FW411x7Yd/?spm_id_from=333.788.videocard.1
https://www.bilibili.com/video/BV1fE41177aw?from=search&seid=10490763502163208232
這個錯位排列必須要理解到位!!!
那麼n個人全部都沒有中獎的概率爲D(n) / n!
接下來的代碼就非常容易理解啦!
#include<iostream>
#include<iomanip>
using namespace std;
long long fun(int t)//需要用long long類型否則越界
{
if(t==1)
return 1;
else
return t*fun(t-1);
}
int main()
{
int N;
int i;
//int f[22];不要用32位int
long long f[22];//__int64 f[22]等價
cin>>N;
f[1]=0;
f[2]=1;
for(i=3;i<=20;i++)
f[i]=(i-1)*(f[i-1]+f[i-2]);
while(N--)
{
int n;
cin>>n;
cout<<setiosflags(ios::fixed)<<setprecision(2)<<(1.0*f[n]/fun(n)*100)<<"%"<<endl;
}
return 0;
}
普及一下,long long 類型也可以用戶__int64 來代替
__int64說白了就是long long ,感興趣的可以去百度一下!