所以,我正在努力检查是否能自动赢得彩票.
这个游戏我玩的有25个号码,你可以选择15个.
如果你打15个数字,你就赢了!(它不需要在序列中)
我有一个列出所有游戏的名单:'TodosJogos'和我的赌博叫做'Jogado'
现在,我正在这样做:(我认为这是一个可怕的)
private void VerificaVitoria(Jogo Jogado, string TipoJogo)
{
bool Ganhou;
List<Jogo> LstClassificadas = new List<Jogo>();
LstClassificadas = TodosJogos.Where(x => x.N1 == Jogado.N1 ||
x.N1 == Jogado.N2 ||
x.N1 == Jogado.N3 ||
x.N1 == Jogado.N4 ||
x.N1 == Jogado.N5 ||
x.N1 == Jogado.N6 ||
x.N1 == Jogado.N7 ||
x.N1 == Jogado.N8 ||
x.N1 == Jogado.N9 ||
x.N1 == Jogado.N10 ||
x.N1 == Jogado.N11 ||
x.N1 == Jogado.N12 ||
x.N1 == Jogado.N13 ||
x.N1 == Jogado.N14 ||
x.N1 == Jogado.N15).ToList<Jogo>();
LstClassificadas = LstClassificadas.Where(x => x.N2 == Jogado.N1 ||
x.N2 == Jogado.N2 ||
x.N2 == Jogado.N3 ||
x.N2 == Jogado.N4 ||
x.N2 == Jogado.N5 ||
x.N2 == Jogado.N6 ||
x.N2 == Jogado.N7 ||
x.N2 == Jogado.N8 ||
x.N2 == Jogado.N9 ||
x.N2 == Jogado.N10 ||
x.N2 == Jogado.N11 ||
x.N2 == Jogado.N12 ||
x.N2 == Jogado.N13 ||
x.N2 == Jogado.N14 ||
x.N2 == Jogado.N15).ToList<Jogo>();
LstClassificadas = LstClassificadas.Where(x => x.N3 == Jogado.N1 ||
x.N3 == Jogado.N2 ||
x.N3 == Jogado.N3 ||
x.N3 == Jogado.N4 ||
x.N3 == Jogado.N5 ||
x.N3 == Jogado.N6 ||
x.N3 == Jogado.N7 ||
x.N3 == Jogado.N8 ||
x.N3 == Jogado.N9 ||
x.N3 == Jogado.N10 ||
x.N3 == Jogado.N11 ||
x.N3 == Jogado.N12 ||
x.N3 == Jogado.N13 ||
x.N3 == Jogado.N14 ||
x.N3 == Jogado.N15).ToList<Jogo>();
//.....
Ganhou = LstClassificadas.Count > 0 ? true : false;
if (Ganhou)
{
MessageBox.Show("You won in the game: " + TipoJogo);
}
}
Run Code Online (Sandbox Code Playgroud)
它与此查询类似:
select * from jogos
where n1 in(8,18,16,7,5,20,9,6,10,17,22,3,14,21,15)
and n2 in(8,18,16,7,5,20,9,6,10,17,22,3,14,21,15)
and n3 in(8,18,16,7,5,20,9,6,10,17,22,3,14,21,15)
and n4 in(8,18,16,7,5,20,9,6,10,17,22,3,14,21,15)
and n5 in(8,18,16,7,5,20,9,6,10,17,22,3,14,21,15)
and n6 in(8,18,16,7,5,20,9,6,10,17,22,3,14,21,15)
and n7 in(8,18,16,7,5,20,9,6,10,17,22,3,14,21,15)
and n8 in(8,18,16,7,5,20,9,6,10,17,22,3,14,21,15)
and n9 in(8,18,16,7,5,20,9,6,10,17,22,3,14,21,15)
and n10 in(8,18,16,7,5,20,9,6,10,17,22,3,14,21,15)
and n11 in(8,18,16,7,5,20,9,6,10,17,22,3,14,21,15)
and n12 in(8,18,16,7,5,20,9,6,10,17,22,3,14,21,15)
and n13 in(8,18,16,7,5,20,9,6,10,17,22,3,14,21,15)
and n14 in(8,18,16,7,5,20,9,6,10,17,22,3,14,21,15)
and n15 in(8,18,16,7,5,20,9,6,10,17,22,3,14,21,15)
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法呢?
Eri*_*ert 32
解决问题的两种方法.
将一个获胜组合表示为一组十五个整数:
HashSet<int>
Run Code Online (Sandbox Code Playgroud)
你有一系列中奖游戏:
IEnumerable<HashSet<int>>
Run Code Online (Sandbox Code Playgroud)
具体而言HashSet<int>.您希望知道特定集合是否与任何获胜集合完全匹配.
static bool DidIWin(IEnumerable<HashSet<int>> winningNumbers, HashSet<int> myNumbers)
{
return winningNumbers
.Where(winningNumber => myNumbers.SetEquals(winningNumber))
.Any();
}
Run Code Online (Sandbox Code Playgroud)
甚至
static bool DidIWin(IEnumerable<HashSet<int>> winningNumbers, HashSet<int> myNumbers)
{
return winningNumbers
.Any(winningNumber => myNumbers.SetEquals(winningNumber));
}
Run Code Online (Sandbox Code Playgroud)
static bool DidIWin(IEnumerable<HashSet<int>> winningNumbers, HashSet<int> myNumbers)
{
return false;
}
Run Code Online (Sandbox Code Playgroud)
方法二要快得多.但是,它在每三百万个中奖号码中平均给出一次不正确的结果.这表明,有时候你可以通过愿意接受少量的不准确来获得巨大的性能.
:-)
| 归档时间: |
|
| 查看次数: |
688 次 |
| 最近记录: |