概率计算 蓝桥杯 C语言

来源:互联网 发布:淘宝开店培训学校 编辑:程序博客网 时间:2024/06/14 08:21
算法提高 概率计算  
时间限制:1.0s   内存限制:256.0MB
    
问题描述
  生成n个∈[a,b]的随机整数,输出它们的和为x的概率。
输入格式
  一行输入四个整数依次为n,a,b,x,用空格分隔。
输出格式
  输出一行包含一个小数位和为x的概率,小数点后保留四位小数
样例输入
2 1 3 4
样例输出
0.3333
数据规模和约定
  对于50%的数据,n≤5.
  对于100%的数据,n≤100,b≤100.
#include <stdio.h>//0.0098int N=3,A=50,B=70,X=162;int nums[101];double zu[101][10001];double fun(){   int i,j,count=0,k=0,temp,p=0;   int min=-1,max=999999;   if(X<A*N||X>B*N)      return 0;   //初始化   zu[1][0]=B-A+1;   count=0;   for(i=1;i<=zu[1][0];i++){  zu[1][i]=(double)1/(double)(B-A+1);   }       for(i=2;i<=N;i++){   min=A*i; max=B*i;   zu[i][0]=max-min+1;   for(j=1;j<=zu[i][0]&&(j+min-1)<=X;j++){   k=0;   zu[i][j]=0;   while(1){  if(k>zu[i-1][0]) break;              temp=(min+j-1)-(min-A+(++k)-1);  if(temp<A||temp>B) continue;     zu[i][j]+=zu[i-1][k]*zu[1][temp-A+1];   }   }           }    k=2;return zu[N][X-A*N+1];}int main(){    int j;scanf("%d%d%d%d",&N,&A,&B,&X);  printf("%.4lf\n",fun());return 0;}

0 0
原创粉丝点击