2011-01-06 89 views
1

我正在研究一个名为lingo的小文字游戏,但我现在被卡住了。游戏有两个玩家;每名球员有一张卡,其中有25个数字介于1到70之间:第1组是偶数,第2组是奇数。重复的号码是不允许的。偶数和奇数的随机数字没有重复

创建随机数正在工作,但我没有得到那些偶数和奇数。还删除重复的号码将无法正常工作。我试图把这些数字放在ArrayList中,然后检查数字是否已经在列表中,但它不起作用。

任何帮助,将不胜感激。我正在用C#编程。

+1

如果你描述你的需求正是,张贴代码为你尝试过什么可能有帮助,描述它是如何工作的(发布错误信息,或发布你看到的不良行为),并解释你想要发生的事情。 – 2011-01-06 18:08:13

+1

NOt确实是一个完整的答案,但要检查数字是否均匀,可以通过检查数字%2 == 0,然后数字是偶数来使用模数运算符。 – 2011-01-06 18:12:06

回答

2

编辑解释:唉,这个数字必须是1和70之间?哈哈,那么不要介意下面的建议;这绝对是过度的。

只需填充70个元素的列表,随机播放它,然后遍历它。

事情是这样的:

List<int> numbers = Enumerable.Range(1, 70).ToList(); 

Shuffle(numbers); // You can find implementations all over the place. 

var evens = numbers.Where(x => x % 2 == 0).Take(25); 
var odds = numbers.Where(x => x % 2 == 1).Take(25); 

需要25个随机偶数和25个随机奇数?

怎么是这样的:

public static IEnumerable<int> GetInfiniteRandomNumbers() 
{ 
    var rand = new Random(); 
    while (true) 
    { 
     yield return rand.Next(); 
    } 
} 

然后25埃文斯和赔率:

var evens = GetInfiniteRandomNumbers().Where(x => x % 2 == 0) 
             .Distinct() 
             .Take(25) 
             .ToList(); 

var odds = GetInfiniteRandomNumbers().Where(x => x % 2 == 1) 
            .Distinct() 
            .Take(25) 
            .ToList(); 
2

创建一个包含数字1到70和shuffle它的列表。这将防止重复。然后,您可以将偶数给予一个团队,将奇数给予另一个团队。

0

的一种方法是:

  1. 填充两个列表,一个从2偶数70,和一个从1到69的奇数因为您填写这些名单与数字序列,你知道没有重复。
  2. 将这两个列表随机混合。在这里,你重新排序的数字,而不是引入新的数字。

通常你会使用Fisher-Yates shuffle作为Card Shuffling in C#