Strona 1 z 1

[C++] Permutacje

: 25 sty 2015, o 14:20
autor: aGabi94
Do programu o permutacjach mam dopisać funkcje sprawdzającą czy podane przeze mnie liczby mogą tworzyć permutacje dla podanego \(\displaystyle{ n}\), która zwraca \(\displaystyle{ 1}\) lub \(\displaystyle{ 0}\). Nie będzie to możliwe gdy któreś elementy permutacji będą się powtarzać lub podamy liczbę większą od \(\displaystyle{ n}\).
Wymyśliłam coś takiego,proszę o poprawę i pomoc.

Kod: Zaznacz cały

int permutacja::czypermutacja()
{if(a[i]>n)   //a[i] - tablica przechowująca elementy permutacji
{return 0;
else
return 1;
}
else
{int licznik[n];  //tablica przechowująca ilość wystąpień danej liczby
for(i=1;i<=n;i++)
licznik[a[i]] ++;
for(i=1;i<=n;i++)
if(licznik[i]!=1)
return 0;
else 
return 1;
}
}

[C++] Permutacje

: 25 sty 2015, o 19:38
autor: lemoid
Nie za bardzo rozumiem o co chodzi w Twoim kodzie (formatowanie jest okropne - skąd się bierzę zmienna i w drugiej linijce? etc.) - jako pseudokod to jeszcze ujdzie - raczej nie jest to C++.

Pomysł masz mniej więcej dobry - zliczać wystąpienia i if jeżeli większy od n.
Tablice w c++ indeksuje się od zera - jak w większości języków programowania (z wyjątkami jak matlab).

Kod: Zaznacz cały

int tab[5]; // jest to tablica zawierająca tab[0],tab[1],tab[2],tab[3],tab[4] - wywołanie tab[5] wyrzuci błąd. Byłoby to odniesienie do 6 elementu - a tablica jest 5-elementowa. 
Ładniej byłoby posortować taką tablicę chociażby za pomocą std::sort. Wtedy nie trzeba byłoby zliczać wystąpień.

[C++] Permutacje

: 26 sty 2015, o 08:03
autor: Vardamir
Ładniej jest przechodzić przez tablicę, to jest kod na max 5 linijek. Sortowanie jest tu zbędne i psuje złożoność.

Tak jak zauważył przedmówca: sformatuj kod. To na pewno pomoże.