c# - 在数组中获取 9 个不同数字的算法

标签 c# algorithm

<分区>

我需要帮助来创建一个算法来生成 9 个随机数。每个数字不得等于任何其他数字。重述为 1-9 的 9 个随机数。

我有这样的想法:

int[] numlist = new int[9];
Random rand = new Random();
int temp;
foreach (int i in numlist) {
    temp = rand.Next(1, 10);
    //check if temp is already a value of a lower index in numlist
        //if so, rolls another random number and checks it again...
    numlist[i] = temp;
}

我有一个方法,它在 for 循环中有 ifs 在 foreach 循环中有 while 循环等等...

最佳答案

在我看来,从 1..9 的列表开始可能会更好 - 然后将其洗牌,以获得随机顺序。

使用 Fisher–Yates shuffle

var random = new Random();
int[] array = Enumerable.Range(1, 9).ToArray();

for (int i = array.Length; i > 1; i--)
{
    // Pick random element to swap.
    int j = random.Next(i); // 0 <= j <= i-1
    // Swap.
    var tmp = array[j];
    array[j] = array[i - 1];
    array[i - 1] = tmp;
}

关于c# - 在数组中获取 9 个不同数字的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30428544/

相关文章:

Java比较方法为Circular Look磁盘算法对数组进行排序

N次绕任意非自交闭合多边形移动点的算法

algorithm - 混淆会使我的程序更加优化

c# - 如何从 Unity 容器中获取服务对象?

algorithm - 如何将数字序列转换为单个数字?

c# - 如何获得 MIDI 事件的准确时间

c# - HttpUtility.HtmlEncode、HttpUtility.HtmlDecode、AntiXSS 库和正确格式化用户输入

algorithm - 什么是有损计数?

c# - 从 Excel 读取数据

c# - 单元测试后面的 "intent"- 我应该瞄准什么?