当前位置:编程学习 > C/C++ >>

hdu 2048 神、上帝以及老天爷

这个题让输出整得好惨。本题的思路是看第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;
}

 


 

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,