1. 程式人生 > >【ACM】杭電OJ 2048

【ACM】杭電OJ 2048

【要點】:

1、階乘

2、錯排公式。

錯排公式:D(1)=0,D(2)=1,D(n) = (n-1)*(D(n-1) + D(n-2))。

階乘則是用迴圈來算。

AC程式碼:

#include <iostream>
#include <cstring>
using namespace std;
int main ()
{
	int i,T,n;
	//a表示階乘,b表示錯排 
	double a[21]={1,1,2},b[21]={0,0,1};
	for(i=3;i<=20;i++)
	{
		a[i]=a[i-1]*i;
		b[i]=(i-1)*(b[i-1]+b[i-2]);
	}
	cin>>T;
	while(T--)
	{
		cin>>n;
		printf("%.2lf",100*b[n]/a[n]);
		cout<<"%"<<endl;
	}
	return 0;
}