c# - tablica liczb bez powtórzeń

c# - tablica liczb bez powtórzeń
A9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11
0

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ć?

PA
  • Rejestracja: dni
  • Ostatnio: dni
0

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.

RE
  • Rejestracja: dni
  • Ostatnio: dni
3

Najprościej będzie tak (dla stosunkowo małych liczb):

Kopiuj
private static Random _random = new Random();

public static IEnumerable<int> RandomSequence(int bound)
{
    return Enumerable.Range(1, bound).OrderBy(x => _random.Next());
}

Wykorzystanie:

Kopiuj
foreach(int number in RandomSequence(10))
    Console.Write("{0} ", number);
A9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11
0

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?

RE
  • Rejestracja: dni
  • Ostatnio: dni
0

Tak.

A9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11
0

Rev, napisałeś że wykorzystanie tego to:

Kopiuj
 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:

Kopiuj
int i=0;
foreach(int number in RandomSequence(10))
{
    moja_tablica[i] = number;
    i++;
}
 

??

RE
  • Rejestracja: dni
  • Ostatnio: dni
1
Kopiuj
int[] tablica = RandomSequence(10).ToArray();
A9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11
0

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.