private int [] Bingos = new int [] ... { 23, 7, 11, 32, 9, 17 } ; // 中奖的号码组 private List < int [] > Tickets = new List < int [] > (); // 1000张废奖票 private List < int [] > BingoTickets = new List < int [] > (); // 200张有奖奖票 /**/ /// <summary>/// 判断是否出现Bingo的直线/// </summary>/// <returns>返回是否出现Bingo的直线</returns> private bool IsBingoLine( int [] ALine) ... { bool[] vExists = new bool[Bingos.Length]; for (int i = 0; i < ALine.Length; i++) for (int j = 0; j < Bingos.Length; j++) if (ALine[i] == Bingos[j]) ...{ vExists[i] = true; } for (int i = 0; i < vExists.Length; i++) ...{ if (!vExists[i]) return false; } return true;} /**/ /// <summary>/// 需要判断的+6+2条直线上的数字下标/// </summary> private int [,] bingoIndexs = new int [,] ... { ...{ 00, 01, 02, 03, 04, 05 }, ...{ 06, 07, 08, 09, 10, 11 }, ...{ 12, 13, 14, 15, 16, 17 }, ...{ 18, 19, 20, 21, 22, 23 }, ...{ 24, 25, 26, 27, 28, 29 }, ...{ 30, 31, 32, 33, 34, 35 }, ...{ 00, 06, 12, 18, 24, 30 }, ...{ 01, 07, 13, 19, 25, 31 }, ...{ 02, 08, 14, 20, 26, 32 }, ...{ 03, 09, 15, 21, 27, 33 }, ...{ 04, 10, 16, 22, 28, 34 }, ...{ 05, 11, 17, 23, 29, 35 }, ...{ 00, 07, 14, 21, 28, 35 }, ...{ 05, 10, 15, 20, 25, 30 }, } ; /**/ /// <summary>/// 判断奖票是否中奖/// </summary>/// <param name="ATicket">奖票数字排列</param>/// <returns>返回奖票是否中奖</returns> private bool IsBingoTicket( int [] ATicket) ... { for (int i = 0; i < 14; i++) ...{ int[] vLine = new int[6]; for (int j = 0; j < vLine.Length; j++) ...{ vLine[j] = ATicket[bingoIndexs[i, j]]; } if (IsBingoLine(vLine)) return true; } return false;} /**/ /// <summary>/// 判断奖票是否重复/// </summary>/// <param name="ATicket">奖票数字排列</param>/// <returns>返回奖票在列表中是否存在</returns> private bool ExistsTicket( int [] ATicket) ... { for (int i = 0; i < Tickets.Count; i++) ...{ bool vExists = true; for (int j = 0; j < Tickets[i].Length; j++) ...{ if (Tickets[i][j] != ATicket[j]) ...{ vExists = false; break; } } if (vExists) return true; } return false;} /**/ /// <summary>/// 随机产生一个组奖票/// </summary>/// <returns>返回奖票数字排列的数组</returns> private int [] RandomTicket() ... { int[] vResult = new int[36]; for (int i = 1; i <= vResult.Length; i++) // 顺序得到-36的数组 ...{ vResult[i - 1] = i; } Random vRandom = new Random(); for (int i = 0; i < vResult.Length; i++) // 打乱顺序 ...{ int j = vRandom.Next(vResult.Length - i); // 随机抽取倒数i前面的数字 int t = vResult[j]; vResult[j] = vResult[vResult.Length - i - 1]; vResult[vResult.Length - i - 1] = t; } return vResult;} /**/ /// <summary>/// 判断奖票是否重复/// </summary>/// <param name="ATicket">奖票数字排列</param>/// <returns>返回奖票在列表中是否存在</returns> private bool ExistsBingoTicket( int [] ATicket) ... { for (int i = 0; i < BingoTickets.Count; i++) ...{ bool vExists = true; for (int j = 0; j < BingoTickets[i].Length; j++) ...{ if (BingoTickets[i][j] != ATicket[j]) ...{ vExists = false; break; } } if (vExists) return true; } return false;} /**/ /// <summary>/// 随机产生一张中将的奖票/// </summary>/// <returns>返回一张中将的奖票</returns> private int [] RandomBingoTicket() ... { int[] vResult = new int[36]; // 随机排列Bingos数组 int[] vBingos = new int[Bingos.Length]; Bingos.CopyTo(vBingos, 0); Random vRandom = new Random(); for (int i = 0; i < vBingos.Length; i++) // 打乱顺序 ...{ int j = vRandom.Next(vBingos.Length - i); // 随机抽取倒数i前面的数字 int t = vBingos[j]; vBingos[j] = vBingos[vBingos.Length - i - 1]; vBingos[vBingos.Length - i - 1] = t; } int vIndex = vRandom.Next(14); // 随机一条线上填上Bingos号码 for (int i = 0; i < 6; i++) ...{ vResult[bingoIndexs[vIndex, i]] = vBingos[i]; } List<int> vNumbers = new List<int>(); for (int i = 1; i <= 36; i++) ...{ bool vExists = false; for (int j = 0; j < Bingos.Length; j++) ...{ if (Bingos[j] == i) ...{ vExists = true; break; } } if (!vExists) vNumbers.Add(i); // 添加Bingo号码之外的数字 } for (int i = 0; i < vResult.Length; i++) ...{ bool vExists = false; for (int j = 0; j < 6; j++) // 如果这个位置已经被填值 ...{ if (bingoIndexs[vIndex, j] == i) ...{ vExists = true; break; } } if (!vExists) ...{ int j = vRandom.Next(vNumbers.Count); // 从余下的数字中抽取一个 vResult[i] = vNumbers[j]; vNumbers.RemoveAt(j); // 移出 } } return vResult;} /**/ /// <summary>/// 判断一个数是否是奖号中的数/// </summary>/// <param name="ANumber">测试数值</param>/// <returns>返回一个数是否是奖号中的数</returns> private bool IsBingoNumber( int ANumber) ... { for (int i = 0; i < Bingos.Length; i++) ...{ if (ANumber == Bingos[i]) ...{ return true; } } return false;} private void button1_Click( object sender, EventArgs e) ... { for (int i = 0; i < 1000; ) // 产生张废票 ...{ int[] vTicket = RandomTicket(); if (ExistsTicket(vTicket) || IsBingoTicket(vTicket)) ...{ continue; } else ...{ Tickets.Add(vTicket); i++; } /**/////输出 Console.WriteLine("------无奖-------"); for (int j = 0; j < vTicket.Length; j++) ...{ if (j % 6 == 0) Console.WriteLine(); if (IsBingoNumber(vTicket[j])) Console.Write("{0:00}*", vTicket[j]); else Console.Write("{0:00} ", vTicket[j]); } Console.WriteLine(); } for (int i = 0; i < 200; ) // 产生张有奖奖票 ...{ int[] vBingoTicket = RandomBingoTicket(); if (ExistsBingoTicket(vBingoTicket)) ...{ continue; } else ...{ BingoTickets.Add(vBingoTicket); i++; } /**/////输出 Console.WriteLine("-----有奖--------"); for (int j = 0; j < vBingoTicket.Length; j++) ...{ if (j % 6 == 0) Console.WriteLine(); if (IsBingoNumber(vBingoTicket[j])) Console.Write("{0:00}*", vBingoTicket[j]); else Console.Write("{0:00} ", vBingoTicket[j]); } Console.WriteLine(); }}