Witam. Potrzebuję wylosować liczby od 1 do n bez powtórzeń i przypisać je do tablicy[n] - czyli chcę po prostu uzyskać tablicę zawierającą liczby bez powtórzeń od 1 do podanej w parametrze funkcji.
Macie jakieś pomysły jak to zrobić?
Witam. Potrzebuję wylosować liczby od 1 do n bez powtórzeń i przypisać je do tablicy[n] - czyli chcę po prostu uzyskać tablicę zawierającą liczby bez powtórzeń od 1 do podanej w parametrze funkcji.
Macie jakieś pomysły jak to zrobić?
Przed zapisaniem liczby do właściwej tablicy sprawdź wyszukiwaniem binarnym, czy ta liczba znajduje się w tablicy, jeśli nie - dorzuć ją. Złożoność wyniesie O(log n), więc bardzo mało.
Najprościej będzie tak (dla stosunkowo małych liczb):
private static Random _random = new Random();
public static IEnumerable<int> RandomSequence(int bound)
{
return Enumerable.Range(1, bound).OrderBy(x => _random.Next());
}
Wykorzystanie:
foreach(int number in RandomSequence(10))
Console.Write("{0} ", number);
Moja tablica będzie mieć wielkość mniej więcej od 100 do 350 elementów(tablica od 1 do tylu liczb). Czy wtedy mogę zastosować te sposoby?
Tak.
Rev, napisałeś że wykorzystanie tego to:
foreach(int number in RandomSequence(10))
Console.Write("{0} ", number);
ale piszę program okienkowy, i chciałbym uzyskać tablicę z tymi liczbami. Czy mogę to zrobić tak:
int i=0;
foreach(int number in RandomSequence(10))
{
moja_tablica[i] = number;
i++;
}
??
int[] tablica = RandomSequence(10).ToArray();
dzięki wielkie Rev ;) ten sposób działa i co więcej krótszego chyba nie da się wymyślić ;) Pozdro
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.