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;}
新聞熱點
疑難解答