庞维邦吧 关注:4贴子:111
  • 1回复贴,共1
Archery 问题描述
2008北京奥运会成功地举办了,奥运会上的 比赛可谓是精彩纷呈。
小明最喜欢看的要算是射箭了,射箭比赛惊心动魄,而且箭手射箭姿势可帅了,只要有射箭比赛,小明一定乖乖地做到电视机前,开 始为选手们提心吊胆了。而相信看过这次女子射箭决赛的同学们一定不会忘记这场前无古人后无来者的比赛,张娟娟以稳定的发挥在不利的情况下,一箭箭稳扎稳 打,最终取得了冠军。当张娟娟夺得冠军时,相信大家也一定和她一起高兴地跳起来了吧。
作为一个程序设计的爱好者,小明惊喜之余突然想到,对于一场射箭比赛,如果已经了解了两方的水平,能不能通过设计程序来预测 最后比赛的情况呢。小明立刻坐到了电脑前劈里啪啦地敲起了键盘,但是由于咱们小明IQ有限,想了半天程序越敲越繁,却还是没有点头绪。聪明的你能帮帮小明 么?
射箭算分的规则很简单:每人射12支箭,每只箭的环数都是整数,且最多10环,最终把两个人的环数相加,环数高者胜利。
由于张娟娟和对手水平都相当高,我们就假设她们只可能打出7环或以上的成绩。给出她们射各个环的概率,保证每个人的概率相加 都为1。然后有三个询问Q1,Q2,Q3,询问为整数(可能为负数),对于询问Q1,你的任务是算出张娟娟最后领先Q1环的概率是多少(Q1若等于0,就 是平局的概率,这里不考虑加赛,Q1若小于0,就是张娟娟落后|Q1|环的概率),并输出这个概率的百分比。
输入格式
第一行有4个用空格分隔的实数:分别表示张娟 娟射出7环、8环、9环、10环的概率。这里保证这4个实数的和为1。
第二行有4个用空格分隔的实数:分别表示张娟娟对手射出7环,8环,9环,10环的概率。同样这4个实数的和也为1。
接下来三行,每行有一个整数,分别表示Q1,Q2,Q3。
输出格式
输出三行,每行一个整数,分别表示张娟娟领先 Q1,Q2,Q3环的概率,概率用百分数表示,百分比四舍五入到整数。
样例输入
0.0 0.0 0.0 1.0
0.0 0.0 0.0 1.0
-1
0
1
样例输出
0%
100%
0%



1楼2010-06-07 21:41回复
    #include<iostream>
    using namespace std;
    float zhia[500][2],zhib[500][2];float huana[4][2],huanb[4][2];float lva=1,lvb=1;int a,b,c=0;
    void qiuzhi(int);
    void bijiao(float);
    int main ()
    {
        float linea,lineb,linec,d=7;
        for(int c=0;c<4;c++)
        {
            huana[c][0]=d;
            huanb[c][0]=d;
            d++;
        }   
        for(int a=0;a<4;a++)
        cin>>huana[a][1];
        for(int b=0;b<4;b++)
        cin>>huanb[b][1];
        cin>>linea>>lineb>>linec;
        qiuzhi(1);
        bijiao(linea);
        bijiao(lineb);
        bijiao(linec);
        system("pause");
        return 0;
       
    }   
    void qiuzhi(int n)
    {
       
        float ansa,ansb;
       
        if(n<4)
        {
            for(a=0;a<4;a++)
            {
            ansa=ansa+huana[a][0];
            lva=lva*huana[a][1];
            ansb=ansb+huanb[a][0];
            lvb=lvb*huanb[a][1];
            qiuzhi(n+1);
            }  
           
        }   
        else
        {
            for(b=0;b<4;b++)
            {
            ansa=ansa+huana[b][0];
            lva=lva*huana[b][1];
            ansb=ansb+huanb[b][0];
            lvb=lvb*huanb[b][1];
            zhia[c][0]=ansa;
            zhia[c][1]=lva;
            zhib[c][0]=ansb;
            zhib[c][1]=lvb;
            c++;
            }  
        }
    }   
    void bijiao(float n)
    {
        int a,b,c;float ans=0;
        for(a=0;a<256;a++)
            for(b=0;b<256;b++)
            if((int)(zhia[a][0]-zhib[b][0])==n)
            ans+=zhia[a][1]*zhib[b][1];
            c=ans*100;
            cout<<c<<"%"<<endl;
    }    


    2楼2010-06-07 21:42
    回复