#include <stdio.h>
#include <stdlib.h>
long long c(long long n,int i)
{
int j;
long long s=n,n1=1,k1=1;
if(i==0)return 1;
if(i==1)return n;
for(j=i;j>=1;j--){
n1=n1*s;
s--;
k1=k1*j;
}
return n1/k1;
}
int main()
{
int i;
long long s[15],n;
s[1]=0;
s[2]=1;
for(i=3;i<=14;i++){
s[i]=(i-1)*(s[i-1]+s[i-2]);
}
while(1){
scanf("%lld",&n);
if(n==0)break;
if(n==1||n==2||n==3){
printf("1\n");
continue;
}
int k;
long long sum=0;
k=n/2;
for(i=k;i>=1;i--){
sum=sum+c(n,i)*s[i];//缺一种没有认错的情况
}
// printf("%lld,,\n",c(25,12));
printf("%lld\n",sum+1);
}
return 0;
}考察错排公式,
本文探讨了错排问题,并通过具体的C语言代码实现了错排公式的计算。该算法能够计算给定数量的对象进行错排的可能性,适用于组合数学中特定排列问题的研究。
3956

被折叠的 条评论
为什么被折叠?



