【发布时间】:2015-02-11 18:47:51
【问题描述】:
我已经环顾四周,但似乎找不到令人满意的答案。我想用唯一的数字填充 5x5。在第 1 列中,它只能是 1-5 之间的数字,在第 2 列中只能是 16-30 之间的数字,依此类推,直到第 5 列中的数字在 61-75 之间。它是一个宾果游戏板。我已经尝试了几件事,但都没有奏效,我似乎无法找到一种用我的规范填充数组的方法。在我看来,它只是带有几个数字的预填充数组的示例,或者代码对我来说是高级的方式。
我不久前创建了一个程序,它创建了一个包含数字 1-75 的常规数组,然后使用 Fisher/yates 算法对其进行洗牌。这是我应该继续使用还是应该从头开始?enter code here
static void Main(string[] args)
{
string choise = "";
while (choise != "q" && choise != "Q")
{
Console.Clear();
Console.WriteLine("[1] for a random row of numbers! \n[2] to start the game!
\n[Q] to quit! \nPress enter after your selection.");
choise = Console.ReadLine();
if (choise == "1")
{
RandomNum.randomTal();
}
(another class)
static Random rnd = new Random();
public static void Shuffle<T>(T[] array)
{
Console.Clear();
for (int i = 0; i < array.Length; i++)
{
int r = i + (int)(rnd.NextDouble() * (array.Length - i));
T t = array[r];
array[r] = array[i];
array[i] = t;
}
}
(and another class)
class RandomNum
{
public static void randomTal()
{
int[] sifferArray = Enumerable.Range(1, 56).ToArray();
shuffle.Shuffle(sifferArray);
foreach (var item in sifferArray)
{
Console.WriteLine(item);
}
Console.WriteLine("Press any key to go back.");
Console.ReadKey();
}
【问题讨论】:
-
fisher/yates 算法应该是完美的。假设您想要 5 个 唯一 介于 16 和 30 之间的随机数。请
Enumerable.Range(16,15).ToArray().Shuffle().Take(5); -
对不起,我真的不知道该怎么办。如果我尝试放入 RandomNum 类,它会在随机播放下显示“;预期”。我认为可枚举不适用于二维数组。
标签: c# arrays random integer autofill