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];
}
}
转载于:https://www.cnblogs.com/lixingle/archive/2013/05/01/3312986.html