50 50 0.5 0.5 10 10 0.51 0.5 50 50 0.51 0.5
0.50 0.60 0.88
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
int N,M;
double p,q,rate,k;
while(cin>>N>>M>>p>>q)
{
if(N==0){cout<<"0.00"<<endl;continue;}
if(M==0){cout<<"1.00"<<endl;continue;}
if(p==0||q==1){cout<<"0.00"<<endl;continue;}
if(q==0||p==1){cout<<"1.00"<<endl;continue;}
if(p==q) rate=1.0*N/(M+N); M,N不一定等于0.5
else
{
k = q*(1-p)/(p*(1-q));
rate = (1.0-pow(k,N))/(1.0-pow(k,M+N)); 【幂运算】
}
cout<<fixed<<setprecision(2)<<rate<<endl; 【设置浮点数输出的有效数字位数】
}
return 0;
}import java.io.*;
import java.util.*;
public class Main
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
while (input.hasNext())
{
double N = input.nextDouble(); // Speakless手上的糖果数N
double M = input.nextDouble(); // Gardon手上的糖果数M
double p = input.nextDouble(); // Speakless能解答出来的概率p
double q = input.nextDouble(); // Gardon能解答出来的概率q
if (N == 0)
{
System.out.println("0.00");
continue;
}
if (M == 0)
{
System.out.println("1.00");
continue;
}
if (p == 0 && q == 1)
{
System.out.println("0.00");
continue;
}
if (p == 1 && q == 0)
{
System.out.println("1.00");
continue;
}
if (p == q)
{
System.out.printf("%.2f", N / (N + M));
System.out.println();
}
else
{
double k = q * (1 - p) / (p * (1 - q));
double rate = (1 - Math.pow(k, N)) / (1 - Math.pow(k, N + M));
System.out.printf("%.2f", rate);
System.out.println();
}
}
}
}
HDU-1204-糖果大战(听说用到Markov process!)
原文:http://blog.csdn.net/qq_16542775/article/details/44967291