欧冠16强抽签(C#)

1、Team类

namespace HssWork
{
    internal class Team
    {
        private string _name;
        private string _group;
        private string _country;
        public Team() { }
        public Team(string name,string group,string country) { 
            this._name = name;
            this._group = group;
            this._country = country;
        }
        public string getName() { 
            return _name;
        }
        public void setName(string name) { 
            this._name = name;
        }
        public string getGroup() { 
            return _group;
        }
        public void setGroup(string group) {
            this._group = group;
        }
        public string getCountry()
        {
            return _country;
        }
        public void setCountry(string country)
        {
            this._country = country;
        }

    }
}

2、抽签10000次

1、抽签规则:同组回避,同国回避,以下可能遇到的问题是前七组按照规则抽取完毕,剩下的两组符合同组/同国,就会导致可能对阵里没有队伍,程序出现异常,所以加个try catch,对于此种情况舍弃继续下一次。

        public static void RandomDraw(int n) {
            //可能对阵
            List<Team> possibleDraw = new List<Team>();
            Random rnd = new Random();
            int x=0;
            List<string> list = new List<string>();
            for (int i = 0; i < n; i++) {
                //每组第一名
                List<Team> teamList1 = GetTeams1();
                //每组第二名
                List<Team> teamList2 = GetTeams2();
                StringBuilder stringBuilder = new StringBuilder();
                try {
                    while (teamList1.Count > 0)
                    {
                        int index1 = rnd.Next(0,teamList1.Count - 1);
                        Team team1= teamList1[index1];
                        teamList1.RemoveAt(index1);
                        foreach (Team team in teamList2)
                        {
                            if (team1.getGroup() != team.getGroup() && team1.getCountry() != team.getCountry()) { 
                                possibleDraw.Add(team);
                            }
                        }
                        int index2= rnd.Next(0,possibleDraw.Count - 1);
                        stringBuilder.Append(team1.getName() + " VS " + possibleDraw[index2].getName());
                        stringBuilder.Append(",");
                        foreach (Team team in teamList2) {
                            if (team.getName().Equals(possibleDraw[index2].getName())) { 
                                teamList2.Remove(team);
                                break;
                            }
                        }
                        possibleDraw=new List<Team>();
                    }
                    string[] array = stringBuilder.ToString().Split(',');
                    foreach (string str in array) {
                        if (str.Length != 0)
                        {
                            list.Add(str);
                        }
                    }
                    x++;
                }catch (Exception ex)
                {
                    //Console.WriteLine(ex.ToString());
                    continue;
                }
            }
            //统计所有对阵情况出现次数和概率
            List<Team> teamList3 = GetTeams1();
            List<Team> teamList4 = GetTeams2();
            foreach (Team t1 in teamList3) {
                string code;
                foreach (Team t2 in teamList4) {
                    if (t1.getGroup() != t2.getGroup() && t1.getCountry() != t2.getCountry()) { 
                        code=t1.getName()+ " VS " + t2.getName();
                        double y = Convert.ToDouble(Get(list, code)) / Convert.ToDouble(x);
                        Console.WriteLine(code+" : "+Get(list,code)+"  "+y.ToString("0.00%"));
                    }
                }
            }
            Console.WriteLine("抽取成功次数:"+x);
        }

2、获取每组的第一和第二

        public static List<Team> GetTeams1()
        {
            List<Team> teams = new List<Team>();
            teams.Add(new Team("多特", "A", "Germany"));
            teams.Add(new Team("巴萨", "B", "Spain"));
            teams.Add(new Team("巴黎", "C", "France"));
            teams.Add(new Team("波尔图", "D", "Portugal"));
            teams.Add(new Team("拜仁", "E", "Germany"));
            teams.Add(new Team("曼城", "F", "England"));
            teams.Add(new Team("皇马", "G", "Spain"));
            teams.Add(new Team("尤文", "H", "Italy"));
            return teams;
        }
        public static List<Team> GetTeams2() {
            List<Team> teams = new List<Team>();
            teams.Add(new Team("马竞", "A", "Spain"));
            teams.Add(new Team("热刺", "B", "England"));
            teams.Add(new Team("利物浦", "C", "England"));
            teams.Add(new Team("沙尔克04", "D", "Germany"));
            teams.Add(new Team("阿贾克斯", "E", "Holland"));
            teams.Add(new Team("里昂", "F", "France"));
            teams.Add(new Team("罗马", "G", "Italy"));
            teams.Add(new Team("曼联", "H", "England"));
            return teams;
        }

3、统计所有抽取结果中每种对阵出现的次数

        public static int Get(List<string> list,string code) { 
            int result = 0;
            foreach (string s in list) { if(s.Equals(code)) { result++; } }
            return result;
        }

4、抽取10W次

        static void Main(string[] args)
        {
            RandomDraw(10000);
            Console.ReadLine();
        }

5、结果(红色为实际抽签结果)

多特 VS 热刺 : 2575  15.99%
多特 VS 利物浦 : 2637  16.38%
多特 VS 阿贾克斯 : 2043  12.69%
多特 VS 里昂 : 2539  15.77%
多特 VS 罗马 : 2998  18.62%
多特 VS 曼联 : 3307  20.54%
巴萨 VS 利物浦 : 2984  18.54%
巴萨 VS 沙尔克04 : 1542  9.58%
巴萨 VS 阿贾克斯 : 2129  13.22%
巴萨 VS 里昂 : 2986  18.55%
巴萨 VS 罗马 : 3338  20.73%
巴萨 VS 曼联 : 3120  19.38%
巴黎 VS 马竞 : 1392  8.65%
巴黎 VS 热刺 : 3383  21.01%
巴黎 VS 沙尔克04 : 1639  10.18%
巴黎 VS 阿贾克斯 : 2697  16.75%
巴黎 VS 罗马 : 3873  24.06%
巴黎 VS 曼联 : 3115  19.35%
波尔图 VS 马竞 : 1638  10.17%
波尔图 VS 热刺 : 2511  15.60%
波尔图 VS 利物浦 : 2726  16.93%
波尔图 VS 阿贾克斯 : 1887  11.72%
波尔图 VS 里昂 : 2688  16.70%
波尔图 VS 罗马 : 2799  17.39%
波尔图 VS 曼联 : 1850  11.49%
拜仁 VS 马竞 : 1654  10.27%
拜仁 VS 热刺 : 2629  16.33%
拜仁 VS 利物浦 : 2904  18.04%
拜仁 VS 里昂 : 2760  17.14%
拜仁 VS 罗马 : 2826  17.55%
拜仁 VS 曼联 : 3326  20.66%
曼城 VS 马竞 : 7382  45.85%
曼城 VS 沙尔克04 : 4963  30.83%
曼城 VS 阿贾克斯 : 3489  21.67%
曼城 VS 罗马 : 265  1.65%
皇马 VS 热刺 : 3244  20.15%
皇马 VS 利物浦 : 3522  21.88%
皇马 VS 沙尔克04 : 2036  12.65%
皇马 VS 阿贾克斯 : 2579  16.02%
皇马 VS 里昂 : 3337  20.73%
皇马 VS 曼联 : 1381  8.58%
尤文 VS 马竞 : 4033  25.05%
尤文 VS 热刺 : 1757  10.91%
尤文 VS 利物浦 : 1326  8.24%
尤文 VS 沙尔克04 : 5919  36.77%
尤文 VS 阿贾克斯 : 1275  7.92%
尤文 VS 里昂 : 1789  11.11%
抽取成功次数:16099

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值