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();
}
}
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();
}
}