1

我想知道如何在 C# 中完成这项任务。例如;

我收到了 10 个问题,其中 3 个要显示给用户,让他们输入答案。假设我们开始的 10 个问题是唯一的,我如何让程序生成 3 个不重复(唯一)的问题。

我在asp.net应用程序中使用逻辑,并且允许在下次刷新页面时显示相同的问题集,所以这对我来说没问题。

4

3 回答 3

3

为您的问题实例使用列表,并随机选择一个(按索引)。然后将其从列表中删除并重复。像这样的东西;

    static void Main(string[] args)
    {
        List<string> questions = new List<string>();
        for (int i = 0; i < 10; i++)
            questions.Add("Question " + i);

        Random r = new Random();
        for (int i = 0; i < 3; i++)
        {
            int nextQuestion = r.Next(0, questions.Count);
            Console.WriteLine(questions[nextQuestion]);
            questions.RemoveAt(nextQuestion);
        }
    }
于 2012-10-08T04:12:52.807 回答
1

一种方法是随机打乱元素,然后选择其中的前三个。关于如何在 C# 中随机播放 -随机化 List<T>
这种方法比从列表中删除大集合中的问题要好,因为在最坏的情况下(当随机化被确定或刚刚发生严重时)由于删除的 O(n) 复杂性,它可以增长到 O(n^2)。

于 2014-05-31T07:24:04.727 回答
0
class Questions
{
    const int NUMBER_OF_QUESTIONS = 10;
    readonly List<string> questionsList;
    private bool[] avoidQuestions; // this is the "do-not-ask-question" list
    public Questions()
    {
        avoidQuestions = new bool[NUMBER_OF_QUESTIONS];

        questionsList = new List<string>
                            {
                                "question1",
                                "question2",
                                "question3",
                                "question4",
                                "question5",
                                "question6",
                                "question7",
                                "question8",
                                "question9"
                            };            
    }

    public string GetQuestion()
    {
        Random rnd = new Random();
        int randomVal;

        // get a new question if this question is on the "do not ask question" list
        do
        {
            randomVal =  rnd.Next(0, NUMBER_OF_QUESTIONS -1);
        } while (avoidQuestions[randomVal]);

        // do not allow this question to be selected again
        avoidQuestions[randomVal] = true;

        // do not allow question before this one to be selected
        if (randomVal != 0)
        {
            avoidQuestions[randomVal - 1] = true;
        }

        // do not allow question after this one to be selected
        if (randomVal != NUMBER_OF_QUESTIONS - 1)
        {
            avoidQuestions[randomVal + 1] = true;
        }

        return questionsList[randomVal];
    }
}

只需创建 Questions 对象并调用 questions.GetQuestions() 三次

于 2012-10-08T04:51:53.387 回答