【ACM】杭电OJ 2048

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CSDN___CSDN/article/details/83829739

【要点】:

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;
}

猜你喜欢

转载自blog.csdn.net/CSDN___CSDN/article/details/83829739