| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 289 人关注过本帖
标题:求大神给指教一下 急
只看楼主 加入收藏
青霜
Rank: 1
等 级:新手上路
帖 子:2
专家分:2
注 册:2012-4-12
收藏
 问题点数:0 回复次数:0 
求大神给指教一下 急
给看看为啥100  5 不对啊

逃课

 时间限制:1000 ms  |  内存限制:65536 KB

描述
在一个星期三的早上,某同学想用扔硬币的方式来决定是否要去上算法课。

 

他扔 n 次硬币,如果当中有连续 m 次以上(含 m 次)的结果都是正面,那么他就去上课,否则就接着睡觉。(假设每次扔硬币扔出的正反两面的概率都是 0.5。)
输入
输入的每行有一组数据,分别为 n 和 m (0 < n <= 2000, 0 < m <= 10)。输入以 0 0 结尾。
输出
对于每组数据,输出他去上课的概率,四舍五入保留小数点后 2 位。
样例输入1 1
2 1
5 5
100 5
2000 5
2 3
0 0样例输出0.50
0.75
0.03
0.81
1.00
0.00
#include <stdio.h>

int c(int n,int m)//求组合数的c(n,m)
{
 int i,r;
 if(n-m<m)
     m=n-m;
 for(r=i=1;i<=m;r/=i++)
     r*=n--;
 return r;
}
int dg(int n)//求阶乘的k!
{
  int i,b=1;
  for(i=1;i<=n;i++)
      b*=i;
  return b;
}
int main()
{
    int n,m,j,i;
    while(scanf("%d %d",&n,&m),n&&m)
    {   
        double p=0.0,sum=0.0,a=1.0;
      if(n<m)
      {
          p=1.00;
        printf("%.2f\n",p);
      }
      else
      {
          if(n/m<5)
          {
           for(j=m;j<=n;j++)
            sum+=c(n,j);
           for(j=0;j<n;j++)
             a*=0.5;
             p=sum*a;
              printf("%.2f\n",p);
          }
          else
          {
            /*for(j=m-1;j>0;j--)
                sum+=c(n,j);
            for(j=0;j<n;j++)
                a*=0.5;
            p=1.0-a*sum;
            printf("%.2f\n",p);*/
              //泊松分布
              double lat=n*0.5;
              double e = 2.718281828459 ;
              for(i=1;i<=lat-1;i++)
                  e*=e;
              for(i=m;i>0;i--)
                  sum+=1.0/dg(i);
              for(i=1;i<=m-1;i++)
                 lat*=lat;
               p=1.0-sum*1.0/e*lat;
                printf("%.2f\n",p);
          }

      }
    }
return 0;
}
搜索更多相关主题的帖子: 数据 小数点 
2012-04-12 17:40
快速回复:求大神给指教一下 急
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.046618 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved