Cała tablica jest wypełniona jedną wartością ponieważ jak pisze dokumentacja:
The Random() constructor uses the system clock to provide a seed value. This is the most common way of instantiating the random number generator.
Co w wolnym tłumaczeniu rozumiem jako:
Domyślny konstruktor Random() używa zegara systemowego do zainicjowania losowych wartości. Jest to najpopularniejszy sposób tworzenia generatora liczb losowych.
Skoro w pętli tworzysz nowy generator liczb losowych, który (ze względu na szybkość działania kodu) jest ciągle inicjowany tą samą wartością (jak napisano wyżej – zegarem systemowym) to pierwsza wartość z tego generatora jest ciągle taka sama.
Dlatego bardziej skłaniałbym się do rozwiązania w stylu:
static void Losuj(int[] tablica)
{
Random rnd = new Random();
for (int i = 0; i < tablica.Length; i++)
{
tablica[i] = rnd.Next(0, 11);
}
}
Po czym w funkcji Liczby wystarczy drobna modyfikacja:
static int[] Liczby(int rozmiar)
{
int[] tab = new int[rozmiar];
Losuj(tab);
return tab; // zwraca tablicę
}