【问题标题】:matrix 4x4 with random number but not repeat (C#) [duplicate]具有随机数但不重复的矩阵 4x4(C#)[重复]
【发布时间】:2020-05-18 12:21:50
【问题描述】:

我想生成从 1 到 16 的随机数,但是一旦生成了该数字,我希望它不能在矩阵中再次生成。我找不到这样做的方法,所以 感谢您的帮助!

【问题讨论】:

标签: c# matrix random generator


【解决方案1】:

实现这一点的一个非常简单的方法是生成所有数字,将它们打乱,然后用它们填充矩阵。

Random rng = new Random(); // System.Random
List<(double random, int value)> values = new List<(double random, int value)>(); // list for shuffling
for ( int i = 0; i < 16; i++ ) {
    values.Add( ( rng.NextDouble(), i + 1 ) ); // random position and the value
}
values.Sort( ( a, b ) => b.random - a.random ); // sort using the random position. Note : Sort is a System.Linq extension method
int[,] matrix = new int[4,4];
for ( int i = 0; i < values.length; i++ ) {
    matrix[ i % 4, i / 4 ] = values[ i ].value; // populate the matrix
    // i % 4 just loops i between 0 and 3
    // i / 4 divides i by 4 and rounds DOWN, ie. increases by 1 each 4
}

【讨论】:

  • 如何保证矩阵中不出现重复值?
  • 填充它的列表中没有重复值。循环生成 1..16 作为值和一些随机数作为顺序。
  • 这是一个有趣的方法。如果随机位置出现重复(机会非常低)怎么办?排序只会将值并排放置,对吗?
  • 是的,那么它们将按照与原始列表中相同的顺序出现。
猜你喜欢
  • 1970-01-01
  • 2015-09-30
  • 1970-01-01
  • 2021-05-09
  • 1970-01-01
  • 2010-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多