Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

C# - массив случайных чисел

Дмитрий Мыслитель (7755), на голосовании 8 месяцев назад
Добрый день.
Не могу придумать, помогите, пожалуйста:
Нужно сделать одномерный массив и заполнить числами от 1 до 10 в случайном порядке и так, чтобы числа не повторялись.
Как это можно написать?

Спасибо!
Дополнен 9 месяцев назад
Короче, всем спасибо, но предложили какой-то бездумно усложненный шлак.
вот самое простое и понятное решение, сам нашел в итоге:


public int[] arrayofquestions = new int[10];




// Заполнение массива
Random random = new Random();
int count = 1;
for (int i = 0; i < arrayofquestions.Length; i++)
{
// Генерируем случайное число
int number = random.Next (1, 11);

// Проверка, существует ли число в массиве
bool exists = false;
for (int j = 0; j < i; j++)
{
if (arrayofquestions[j] == number )
{
exists = true;
i--; // если не сделать эту операцию, но он при совпадениях забивает пустые ячейки массива нулями
break;
}
}

// Если число не существует в массиве, добавляем его
if (!exists)
{
arrayofquestions[i] = number;
count++;
}
}
Голосование за лучший ответ
♡$ⴎG@r₱u₷sყ♡ Искусственный Интеллект (157224) 9 месяцев назад
 int[] array = Enumerable.Range(1, 10).OrderBy(x => Guid.NewGuid()).ToArray();  
Jurijus ZaksasИскусственный Интеллект (445871) 9 месяцев назад
Ой хитро! Молодца.
♡$ⴎG@r₱u₷sყ♡ Искусственный Интеллект (157224) Jurijus Zaksas, опять же спасибо ИИ ?
Bulat_Almukhametov Мастер (1160) 9 месяцев назад
 using System; 
using System.Linq;

var array = Enumerable.Range(1, 10).OrderBy(Random.Shared.Next).ToArray();

Console.WriteLine(string.Join(", ", array));
Без класса и функции Main в .NET 5 и выше.
Jurijus Zaksas Искусственный Интеллект (445871) 9 месяцев назад
Вышеуказанный способ вполне рабочий и имеет сложность O(nlogn).
Для 10-и элементов сработает прекрасно.
И для 10000 тоже.
Но! Если тебе надо сбацать очень много таких циферок, есть способ со сложностью O(n):

 public static int[] GenerateRandomNonRepeating(int n, int Start = 1) 
{
int[] a = Enumerable.Range(Start, n).ToArray();
Random r = new Random();
int[] Result = new int[n];
for (int i = 0; i < n; i++)
{
int k = r.Next(n - i);
Result[i] = a[k];
a[k] = a[n - i - 1];
}
return Result;
}
ДмитрийМыслитель (7755) 9 месяцев назад
Здравсвуйте. подскажите, пожалуйста: Обращаюсь к Вашему метода так: GenerateRandomNonRepeating(10);
Дмитрий Мыслитель (7755) а на выходе получаю System.int 32[] ЧТо я делаю не так?
Похожие вопросы