我现在看了很多,但似乎找不到令人满意的答案。我想用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();
}
答案 0 :(得分:0)
static void Main(string[] args)
{
var bingoCard = getBingoCard();
int colNum = 1;
foreach (var col in bingoCard)
{
Console.Write("col" + colNum.ToString() + " ");
foreach (var item in col)
{
Console.Write(item + " ");
}
Console.WriteLine();
colNum++;
}
Console.WriteLine();
for (int x = 0; x < 5; x++)
{
for (int y = 0; y < 5; y++)
{
Console.Write(bingoCard[y][x].ToString() + (bingoCard[y][x] > 9 ? " " : " "));
}
Console.WriteLine();
}
Console.ReadLine();
}
public static int[][] getBingoCard()
{
var randGen = new Random();
var bingoCard = new int[][]{
new int[5],
new int[5],
new int[5],
new int[5],
new int[5]
};
for (int y = 0; y < 5; y++)
{
for (int x = 0; x < 5; x++)
{
var possibleNumber = randGen.Next((15 * y) + 1, ((y + 1) * 15));
while (bingoCard[y].Any(num => num == possibleNumber))
{
possibleNumber = randGen.Next((15 * y) + 1, ((y + 1) * 15));
}
bingoCard[y][x] = possibleNumber;
}
}
return bingoCard;
}
答案 1 :(得分:0)
当我需要时,我会使用这样的东西:
private int[] generatePermutation(int size, int seed)
{
var permutation = new int[size];
Rnd random = new Rnd(seed);
List<int> permList = new List<int>(size);
for (int i = 0; i < size; i++) permList.Add(i);
for (int i = 0; i < size; i++)
{
int index = random.Next(0, permList.Count);
permutation[i] = permList[index];
permList.RemoveAt(index);
}
return permutation;
}
答案 2 :(得分:0)
如果您的类BingoBoard
具有与单元格对应的嵌入式2d整数数组,则可以生成随机的单元格模式,如下所示:
public class BingoBoard
{
public const int BoardDimension = 5;
readonly int[,] board = new int[BoardDimension, BoardDimension];
public BingoBoard()
{
// In column 1 it can only be a number between 1-15 and in column 2 number 16-30 and so on up until column 5 with a number between 61-75.
for (int iRow = 0; iRow < board.GetLength(0); iRow++)
{
var col = Enumerable.Range(iRow * 3 * board.GetLength(1) + 1, 3 * board.GetLength(1)).Shuffle().Take(board.GetLength(1)).ToArray();
for (int iCol = 0; iCol < board.GetLength(1); iCol++)
board[iRow, iCol] = col[iCol];
}
}
public int[,] Board
{
get
{
return board;
}
}
}
public static class RandomProvider
{
// Adapted from http://csharpindepth.com/Articles/Chapter12/Random.aspx
private static int seed = Environment.TickCount;
[ThreadStatic]
static Random random;
public static Random GetThreadRandom()
{
if (random == null)
random = new Random(Interlocked.Increment(ref seed));
return random;
}
}
public class FisherYatesShuffle
{
public void ShuffleInPlace<T>(T[] array)
{
var randomizer = RandomProvider.GetThreadRandom();
// http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#The_modern_algorithm , second version.
for (int i = 0; i < array.Length; i++)
{
// http://msdn.microsoft.com/en-us/library/2dx6wyd4%28v=vs.110%29.aspx
var j = randomizer.Next(i, array.Length); // i = inclusive lower bound; array.Length = The exclusive upper bound of the random number returned
array.Swap(i, j);
}
}
}
public static class ListExtensions
{
public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> list)
{
var scrambled = list.ToArray();
new FisherYatesShuffle().ShuffleInPlace(scrambled);
return scrambled;
}
public static void Swap<T>(this T[] list, int i, int j)
{
if (list == null)
throw new ArgumentNullException();
if (i != j)
{
T temp = list[i];
list[i] = list[j];
list[j] = temp;
}
}
}