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