错排公式及其近似公式

错排问题详解:

http://zh.wikipedia.org/wiki/装错信封问题

解决方法,不再赘述,这里给出错排公式及其近似公式的代码实现:

1.    

#include <iostream>
using namespace std;

int getjie(int a){
    if(a==1)return 1;
    if(a>1){
        return a*getjie(a-1);
    }
    
}

int main(){
    int n;
    cin>>n;
    double sum=0;
    int da=getjie(n);
    for(int i=2;i<=n;++i){
        if(i%2==0){
            sum+=da/getjie(i);
        }
        else{
            sum-=da/getjie(i);
        }
    }
    cout<<sum<<endl;
} 

 

2.

 

#include <iostream>
#include <cmath>
using namespace std;

double getjie(int n){
	if(n==1) return 1;
	if(n>1) return n*getjie(n-1);
}

double gete(){
	double out=1;
	for(int i=1;i<100;++i){
		out=out+1.0/getjie(i);
	}
	return out;
}

int main(){
	int n;
	cin>>n;
	double out=getjie(n)*1.0/gete() +0.5;
	cout<<floor(out);	
}

这里自然对数的底数e的数值的计算,及数据较大时对阶层计算的优化,这两个问题需要改进,这里先挂起。

 

posted on 2015-01-29 20:17  逸阳  阅读(515)  评论(0编辑  收藏  举报

导航