algorytm.org

Implementacja w C#

Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Losowanie bez powtórzeń - Implementacja w C#
Ocena użytkownikóww: *****  / 9
SłabyŚwietny
Nadesłany przez Andrzej Borucki, 08 grudnia 2011 16:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

Losowanie/Program.cs:
// Andrzej Borucki
// z klasy LotteryDrawing z coreJava.zip 
// www.algorytm.org

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Losowanie
{        
    class Program
    {        
        static void Losowanie(int n,int k)
        {
            Random rand = new Random();
            // wypełnianie tablicy liczbami 1,2...n
            int[] numbers = new int[n];
            for (int i = 0; i < n; i++)
                numbers[i] = i + 1;
            // losowanie k liczb

            for (int i = 0; i < k; i++)
            {
                // tworzenie losowego indeksu pomiędzy 0 i n - 1
                int r = rand.Next(n);

                // wybieramy element z losowego miejsca
                Console.WriteLine(numbers[r]);

                // przeniesienia ostatniego elementu do miejsca z którego wzięliśmy
                numbers[r] = numbers[n - 1];
                n--;
            }
        }

        static void Main(string[] args)
        {                       
            Losowanie(10, 10);          
        }
    }
}
Komentarze
photo
0 # Annna 2012-06-20 15:57
Jeżeli dany język programowania na to pozwala, można też użyć kolekcji zamiast tablic. Zamiast przenosić ostatni element usuwałoby się go z kolekcji.

Oczywiście, co kto woli. :)
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
0 # Borneq 2018-02-24 10:39
Dla małej wielkości kolekcji byłoby to prostsze, bardziej zrozumiałe rozwiązanie. Przenoszenie ma zaletę, gdy chcemy wybrać dużą ilość z wielkiej ilości.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
0 # gość 2015-03-02 01:42
Mógłby ktoś dokładnie wytłumaczyć na czym działa ten kod?? użyłem go w programie i widzę, że generuje losowe cyfry z danego przedziału bez powtórzeń, ale nie bardzo rozumiem o co tam chodzi.. chciałem go użyć do swojego programu gdzie miałbym trzy checkboxy i chciałem uzyskać przypisanie losowych tekstów z bazy (żeby user za każdym razem miał wybór odpowiedzi w innym miejscu) i tym samym miałbym zapamiętane miejsce poprawnej odpowiedzi, ale kurcze nie bardzo rozumiem o co w tym kodzie chodzi jeśli miałbym opisać krok po kroku i np w danym momencie przypisać podaną wartość do danego pola..
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
0 # Borneq 2018-02-24 10:25
Kluczowa jest linia "n--;". Zmniejsza się przedział losowania a na tym przedziale są tylko liczby, które nie były losowane.
Odpowiedz | Odpowiedz z cytatem | Cytować
Dodaj komentarz