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