生成Bingo有奖和无奖奖票

private   int [] Bingos  =   new   int []  2371132917 } //  中奖的号码组
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 [,]  {  
        
000102030405 }
        
060708091011 }
        
121314151617 }
        
181920212223 }
        
242526272829 }
        
303132333435 }

        
000612182430 },
        
010713192531 },
        
020814202632 },
        
030915212733 },
        
041016222834 },
        
051117232935 },

        
000714212835 },
        
051015202530 },
    }
;

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

}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值