蓝桥杯(比赛概率题)

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];

	}

	

}


你可能感兴趣的:(蓝桥杯)