一道简单的C#面试题

试题:

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

一道简单的C#面试题_第1张图片

你可能感兴趣的:(c#,算法,数据结构)