Tablica dwuwymiarowa bez powtorzen w wierszu

0

Witam. Zaczynam dopiero przygode z programowaniem i potrzebuje pomocy. Chcialam napisac program do generowania losowych zakladow lotto. Uzytkownik podaje ilosc zakladow i wyswietla sie okreslona ilsc zakladow. Chcialam to zrobic w postaci tablicy dwuwymiarowej Lotto[i,6] gdzie i to liczba zakladow. Samo stworzenie tablicy nie sprawilo mi problemow. Mam nawet napisana funkcje do sortowania liczb w poszczegolnych wierszach. Ale moj problem polega na tym ze powtarzaja mi liczby w poszczegolnych zakladach czyli w jednym zakladzie sa dwie takie same liczby. Nie wiem jak to rozwiazac.

Wczesniej robilam wersje zapisywania wyniku do tablicy jednowymiarowej i powtorzenie jej w petli for do ilosci zakladow. Wtedy nie mialam problemow ze sprawdzeniem czy nowy wylosowany element znajduje sie w danej tablicy. Ale gdy zmieniam tablice na dwuwymiarowa nie wiem czego uzyc.
Z gory dziekuje za wszelka pomoc.

1

W C# niestety nie ma klasy Set, ona byłaby do tego idealna :/ Jeszcze Distionary sprawdza unikalność, ale on się nie nadaje...

Sposobów jest dużo...np.

SprawdzZaklady(Lotto[,] costam)
{
  for(int i = 0; i < costam.GetLenght(0); i++)
  {
    for (int j = 0; j < 5; j++)
    {
     //tutaj sprawdzasz. (costam[i, j] to kolejny obiekt tablicy)
    }
  }
}
0

@msm, dlaczego: j < 5, a nie j < costam.GetLenght(1)?

@marcia331, czyli masz jakiś algorytm umożliwiający prawidłowe wypełnienie tablicy jednowymiarowej, tylko nie umiesz go dostosować do tablicy dwuwymiarowej? Z czym konkretnie masz problem?

1

@msm, dlaczego: j < 5, a nie j < costam.GetLenght(1)?

Tak zrozumiałem autorkę:

Chcialam to zrobic w postaci tablicy dwuwymiarowej Lotto[i,6] gdzie i to liczba zakladow.

0

Proponuję pojedynczy zakład trzymać jako int[6], a zakłady razem w klasie List:

            var zaklady=new List<int[]>(); // lista tablic intów
            // dodawanie zakładu do listy:
            zaklady.Add(new int[] { 1, 2, 3, 4, 5, 6 });

Natomiast rozwiązania problemu z powtarzaniem się liczb poszukaj pod hasłem "losowanie bez powtórzeń". Było wałkowane wielokrotnie.

0

Somekind jesli chodzi o wypelnienie pojedynczej tablicy to zrobilam to w taki sposob:
static int[] DuzyLotek()
{

        int[] Lotto = new int[6];
        for (int i = 0; i < 6; i++)
        {
            int temp = rand.Next(1, 49);
            if (Lotto.Contains(temp))
            {
                i--;
            }
            else
                Lotto[i] = temp;
        }

        return Lotto;
    }

Problem w tym ze dla tablicy dwuwymiarowej nie jest dostepna opcja contains ktora rozwiazywala sprawe.
Probowalam uzywac ComparTo ale wyskakiwal blad.

0

a) tablica jest na tyle mała że możesz zrobić

if ((Lotto[x,0]==temp) || (Lotto[x,1]==temp) || (Lotto[x,2]==temp) ||
    (Lotto[x,3]==temp) || (Lotto[x,4]==temp) || (Lotto[x,5]==temp))
  …

b) ładniejsze będzie

bool bylo=false;
for (int k=0;k<=5;k++)
  if (Lotto[x,k]==temp)
  {
    bylo=true;
    break;
  }
if (bylo)
  …

c) modyfikacja licznika pętli (i--) wewnątrz tej pętli na pewno nie jest zalecana.

1 użytkowników online, w tym zalogowanych: 0, gości: 1