C++问题,大家帮帮忙

来源:百度知道 编辑:UC知道 时间:2024/05/27 17:15:08
http://acm.nuaa.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1148
哪位高手编编这个程序,下面是我编的(不能完全输出正确答案,在着基础上改改也行,在下感激不尽)
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
int a,b,i;
double P=0.0,T=1.0,M=1.0,J=1.0,A;
cin>>a>>b;
for(i=1;i<=a;i++){
if(i==1) P=1.0;
else{
T=T/2;
M=M*(double)(b-2+i);
J=J*(double)(i-1);
A=M/J*T;
P=P+A;
}
}
for(i=1;i<=b;i++)
P=P/2;
P=P*100.0;
cout<<setiosflags(ios::fixed)<<setprecision(4)<<P;
return 0;
}

我只能说你把这道题想的太简单了,你必须考虑到前者获胜的全部出招组合,根本不是你这点代码能解决的,好好再想想吧。

你可以参考一下这个,虽然我不敢保证会被接受。

#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;

long ncr(int n,int r){
int d=r>(n-r)?r:n-r;
long p=1;
int m=n;
while(n>d){
p*=n;
n--;
}
while(m-d>0){
p/=(m-d);
d++;
}
return p;
}

float winningProbability(int h1,int h2){
if(h1>h2) return 100.0;
else{
int i=0;
float probability=0;
while(i<h1){
probability+=pow(0.5,h2+i)*ncr(h2,i);
i++;
}
return probability*100;
}
}

int main(){
int h1,h2;
cin>>h1>>h2;
cout<<fixed<<setprecision(4)<<winningProbability(h1,h2)<<endl;
return 0;
}