题意:问1~n的所有的排列组合中那些,所有数字 i 不在第 i 位的个数之和除以n的全排,即题目所说的期望,比如n=3
排列有123(0),132(2),231(3),213(2),312(3),321(2) ans=(0+2+3+2+3+2)/6=2
题解: 发现当1在1的位置上的时候,有 (n-1) ! 种情况
那么1不在它的位置上有 n! - (n-1) ! 种情况
一共有 n 个这样的数字,所以乘n
最后除以 n!,化简得到 n-1
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 int caseCnt; 6 scanf("%d",&caseCnt); 7 int t=0; 8 while(caseCnt--) { 9 int n; 10 scanf("%d",&n); 11 printf("Case #%d: %.10lf ",++t,n-1.0); 12 } 13 return 0; 14 }