试题:
抽顺序问题:有10位面试者,需要随机抽号面试。
1)总共十个号数,用数组表示;
2)每一位面试者输入1开始抽签,然后得到抽签号,输入2结束抽签;
3)抽签顺序不能重复。
解析:
利用Fisher-Yates洗牌算法生成一个随机顺序的数组即可,至于Fisher-Yates洗牌算法是什么,可以问问度娘。
参考答案(这里只做简单的演示):
static void ExtractionOrder(){// 创建 Random 对象以生成随机数Random random = new Random();// 存储面试者编号的整数列表int n = 10;int[] interviewNumbers = new int[n];for (int i = 0; i < n; i++){// 将面试者编号添加到列表中interviewNumbers[i] = i + 1;}// Fisher-Yates洗牌算法生成随机编号int[] nums = new int[n];for (int i = 0; i < n; i++){int index = random.Next(n - i);nums[i] = interviewNumbers[index];if (index != n - i - 1){interviewNumbers[index] = interviewNumbers[n - i - 1];}}Console.WriteLine(string.Join(",", nums));}
上面代码中的nums数组为生成的随机编号,运行结果如下: