Генерация случайных значений без повторений - C#
Формулировка задачи:
Всем привет! У меня проблема, надо рандомно раскидать 4 переменных без повторений, как это можно реализовать? Пока попробовал так, но прога за 15 минут так и не запустилась
int answer1 = 0;
int answerss2 = 0;
int answerss3 = 0;
int answerss4 = 0;
int x = 1;
Random i = new Random((int)(DateTime.Now.Ticks));
metka:
int value1 = i.Next(5);
switch (value1)
{
case 1:
if (answer1 != 1)
{
switch (x)
{
case 1:
randomanw1 = trueanswer1;
++x;
++answer1;
break;
case 2:
randomanw1 = answer2;
++x;
++answerss2;
break;
case 3:
randomanw1 = answer3;
++x;
++answerss3;
break;
default:
randomanw1 = answer4;
++x;
++answerss4;
break;
}
}
else
break;
break;
case 2:
if (answerss2 != 1)
{
switch (x)
{
case 1:
randomanw2 = trueanswer1;
++x;
++answer1;
break;
case 2:
randomanw2 = answer2;
++x;
++answerss2;
break;
case 3:
randomanw2 = answer3;
++x;
++answerss3;
break;
case 4:
randomanw2 = answer4;
++x;
++answerss4;
break;
}
}
else
{
break;
}
break;
case 3:
if (answerss3 != 1)
{
switch (x)
{
case 1:
randomanw3 = trueanswer1;
++x;
++answer1;
break;
case 2:
randomanw3 = answer2;
++x;
++answerss2;
break;
case 3:
randomanw3 = answer3;
++x;
++answerss3;
break;
case 4:
randomanw3 = answer4;
++x;
++answerss4;
break;
}
}
else
{
break;
}
break;
case 4:
if (answerss4 != 1)
{
switch (x)
{
case 1:
randomanw4 = trueanswer1;
++x;
++answer1;
break;
case 2:
randomanw4 = answer2;
++x;
++answerss2;
break;
case 3:
randomanw4 = answer3;
++x;
++answerss3;
break;
case 4:
randomanw4 = answer4;
++x;
++answerss4;
break;
}
}
else
{
break;
}
break;
default:
break;
}
if (answer1 == 0 || answerss2 == 0 || answerss3 == 0 || answerss4 == 0 || x != 4)
goto metka;Решение задачи: «Генерация случайных значений без повторений»
textual
Листинг программы
List<int> RandomizeAnswers(List<int> answers)
{
var answersCopy = new List<int>(answers);
var randomAnswers = new List<int>(answers.Count);
var rnd = new Random();
while (answersCopy.Count > 1)
{
int idx = rnd.Next(0, answersCopy.Count);
randomAnswers.Add(answersCopy[idx]);
answersCopy.RemoveAt(idx);
}
randomAnswers.Add(answersCopy[0]);
return randomAnswers;
}