12 Sample Output50.00%每个名字之间有对应的关系,可以看出是关于递推的问题,求出递推公式即可。
若第n个人抽中了第n-1个人的名字,则对于第n-1个人有n-1种选择,即(n-1)*f(n-1)。
若第n个人抽中第n-2个人的名字,则对于第n-2个人有n-1种选择,即(n-1)*f(n-2)。
递推公式:f(n)=(n-1)*(f(n-1)+f(n-2))
求出所有的可能性再除以总的可能就可以。
或者根据错排的解法也可以解出递推公式。
AC代码:#include <stdio.h>#include <stdlib.h>int main(){ int t,n,i; long long num[30],fact; scanf("%d",&t); num[1]=0; num[2]=1; for(i=3; i<25; i++) { num[i]=(i-1)*(num[i-1]+num[i-2]); } while(t--) { fact=1; scanf("%d",&n); for(i=1; i<=n; i++) { fact*=i; } printf("%.2lf%%/n",num[n]*100.0/fact); } return 0;}
新闻热点
疑难解答