這個題讓輸出整得好慘。本題的思路是看第n個人的情況,若第n個人拿了他前面(n-1)個人的東西,而這個人正好拿了第n個人的東西,則這個事件發生必然為f(n-2),另一種情況兩人的物品並沒有互換,則剩下的人再繼續進行這件事,f(n-1)。發生的總的可能性就是(n-1)*(f(n-1)+f(n-2)).注意要輸出%要連著兩個%才行。
[cpp]
<SPAN style="FONT-SIZE: 18px">#include<iostream>
#include<stdio.h>
using namespace std;
_int64 a[21][2];
int main()
{
int i,C,n;
a[2][1]=1;
a[2][0]=2;
a[3][1]=2;
a[3][0]=6;
for(i=4;i<=20;i++)
{
a[i][1]=(i-1)*(a[i-1][1]+a[i-2][1]);
a[i][0]=a[i-1][0]*i;
}
cin>>C;
while(C!=0)
{
cin>>n;
printf("%.2f%%\n",a[n][1]*100.0/a[n][0]);
C=C-1;
}
return 0;
}
</SPAN>
#include<iostream>
#include<stdio.h>
using namespace std;
_int64 a[21][2];
int main()
{
int i,C,n;
a[2][1]=1;
a[2][0]=2;
a[3][1]=2;
a[3][0]=6;
for(i=4;i<=20;i++)
{
a[i][1]=(i-1)*(a[i-1][1]+a[i-2][1]);
a[i][0]=a[i-1][0]*i;
}
cin>>C;
while(C!=0)
{
cin>>n;
printf("%.2f%%\n",a[n][1]*100.0/a[n][0]);
C=C-1;
}
return 0;
}