Mam problem z zadaniem potrzebuje pomocy oto jego treść:
Funkcja usun
rozpatrującą rozłączne trójki elementów sznura i usuwającą:
- drugi element trójki jeśli średnia trójki jest większa od G (gdzie G jest liczbą całkowitą będącą parametrem funkcji),
- w przeciwnym przypadku - całą trójkę oraz dwa, znajdujące się najbliżej za trójką (czyli pierwszy i drugi odpowiedni, idąc w kierunku końca sznura),
- elementy przechowujące liczby występujące w tej trójce (o ile takie elementy istnieją; przy czym jeśli jest tylko jeden taki element, to też jest usuwany). Usunięte elementy za trójkami" nie wchodzą skład kolejnych sprawdzanych trójek.
Pamięć zajmowana przez usuwane elementy ma zostać zwolniona.
Funkcja nie może używać tablic, pomocniczych sznurów ani struktur danych dostępnych w bibliotece standardowej (wektorów, list, kolejek, itp.).
Przykład: dla G-100 sznur: 7,2,6,4,8,9,3,2,5,6,500,2,2,1,1,1,7
zostanie przekształcony do postaci 3,500,7
(pierwsza trójka to 7,2,6
jej średnia nie jest większa niż G, więc usuwamy całą trójkę i do tego 2 i 6 znajdujące się w dalszej części sznura (pierwsze znalezione w dalszej części sznura liczby z trójki); kolejna trójka to 4,8,9, jej średnia nie jest większa niż G, ale usuwamy tylko tę trójkę, bo w dalszej części sznura nie ma 4, 8 ani 9; kolejna trójka to 3,5,500 (2 i 6 zostały wcześniej usunięte), ma ona średnią większą od G, więc usuwamy z niej 5, kolejna trójka to 2,2,1, jej średnia nie jest większa od G, więc usuwamy całą trójkę i do tego 1,1 stojące za nią)
Oto mój kod:
void sznur::usun(int G)
{
Node*tmp=pocz;
int ilosc=1;
int war=0;
float srd=0;
while(tmp!=nullptr)
{
if(tmp->dane%2==0)
{
srd+=tmp->dane;
ilosc++;
}
tmp=tmp->nast;
war++;
}
srd=srd/ilosc;
Node*zaszuk=nullptr;
Node*a=pocz;
while(a!=nullptr && a->nast!=nullptr && a->nast->nast!=nullptr)
{
Node*jeden=a;
Node*dwa=a->nast;
Node*trzy=a->nast->nast;
if(srd>G)
{
if(zaszuk!=nullptr)
{
zaszuk->nast=trzy->nast;
}
else
{
pocz=trzy->nast;
}
delete dwa;
ileJest--;
zaszuk=trzy;
a=zaszuk->nast;
}
else
{
if(zaszuk!=nullptr)
{
zaszuk->nast=trzy->nast;
}
else
{
pocz=trzy->nast;
}
delete jeden;
delete dwa;
delete trzy;
ileJest=ileJest-3;
zaszuk=trzy;
a=zaszuk->nast;
}
}
}
//7 2 6 4 8 9 3 2 5 6 500 2 2 1 1 1 7 -> 3,500,7
Problem polega na tym iż "Przykład: dla G-100 sznur 7,2,6,4,8,9,3,2,5,6,500,2,2,1,1,1,7 zostanie przekształcony do postaci 3,500,7 (pierwsza trójka to 7,2,6; jej średnia nie jest większa niż G, więc usuwamy całą trójkę i do tego 2 i 6 znajdujące się w dalszej części sznura" moje pytanie brzmi jak usinąć całą trójke (to akurat wiem) ale do tego elementy 2 i 6 znajdujące się w dalszej części szura bo nie za bardzo rozumiem jak mam to zrobić jak mam je usunąć z góry dzięki za pomoc