现在的位置: 首页 > 综合 > 正文

蓝桥杯(比赛概率题)

2014年01月21日 ⁄ 综合 ⁄ 共 1186字 ⁄ 字号 评论关闭
package com.lanqiaobei.dati_01;

import java.util.Random;
/*
    足球比赛具有一定程度的偶然性,弱队也有战胜强队的可能。

    假设有甲、乙、丙、丁四个球队。根据他们过去比赛的成绩,得出每个队与另一个队对阵时取胜的概率表:

	    甲  乙  丙  丁   
	甲   -  0.1 0.3 0.5
	乙 0.9  -   0.7 0.4 
	丙 0.7  0.3 -   0.2
	丁 0.5  0.6 0.8 -

    数据含义:甲对乙的取胜概率为0.1,丙对乙的胜率为0.3,...

    现在要举行一次锦标赛。双方抽签,分两个组比,获胜的两个队再争夺冠军。(参见【1.jpg】)

    请你进行10万次模拟,计算出甲队夺冠的概率。


    注意:

    请仔细调试!您的程序只有能运行出正确结果的时候才有机会得分!
    
*/
public class DuoGuanGaiLv {

	/**
	 * @param args
	 * @author wildcat
	 */
	//定义一个二维数组,用来存取概率
	public static double gl[][]={
		{1,0.1,0.3,0.5},
		{0.9,1,0.7,0.4},
		{0.7,0.3,1,0.2},
		{0.5,0.6,0.8,1}};
	public static int mamber[]={0,1,2,3};   //用来代表四个队员
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		double asuccess=0;               //进行1000000次的模拟
		for (int i=0;i<1000000;i++){
			asuccess+=getResult();
		}
		System.out.println(asuccess/1000000);
		

	}
	public static double getResult(){
		int enemy=getEnemy();	//甲抽签获得对手
		
		double su1=pkAandB(0,enemy);				//甲于第一个对手比获胜的概率
		
		int p1=0,p2=0; //代表另一组的两个队
		for (int i=1;i<4;i++){
			if (enemy!=i&p1==0){  //第一个
				p1=i;
			}else if (enemy!=i){
				p2=i;
			}
		}
		double nother=pkAandB(p1,p2);   //另一个组的p1获胜的概率
		double result=su1*nother*pkAandB(0,p1)+su1*(1-nother)*pkAandB(0,p2);  //返回在一次比赛中甲获胜的概率
		return result;
	}
	//甲获得对手
	public static int  getEnemy(){
		Random ra=new Random();
		return ra.nextInt(3)+1;
		
	}
	//a于b比赛 返回a获胜的概率
	public static double pkAandB(int a,int b){	
		return gl[a][b];
	}
	
}

【上篇】
【下篇】

抱歉!评论已关闭.