试题:
抽顺序问题:有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数组为生成的随机编号,运行结果如下: