• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Program wywłaszczony - problem z sortowaniem

Object Storage Arubacloud
0 głosów
192 wizyt
pytanie zadane 12 listopada 2015 w C i C++ przez Dittum Nowicjusz (150 p.)

Witam! Od pewnego czasu zmagam się z zadaniem http://main.edu.pl/pl/archive/oi/4/kaj 
Do jego wykonania użyłem na początku sortowania bąbelkowego lecz dostałem komunikat "Program wywłaszczony" i 44 punkty. Postanowiłem przerzucić się na quicksort lecz wtedy było jeszcze gorzej "Program wywłaszsczony" i 0 punktów. W czym jest problem? Nie mam za bardzo pomysłu. 
Ktoś już zasugerował mi abym użył funkcji sort z biblioteki algorithm, lecz zastosowanie jej wymaga wiedzy, której nie posiadam, więc póki co chciałbym to wyminąć jeśli to możliwe. 
Dołączam mój kod źródłowy. Z góry dziękuję za pomoc. :)

 

#include <iostream>

using namespace std;
int wagamax, ilosc, licznik=0;

void quicksort(int *tablica, int lewy, int prawy)
{
    int v=tablica[(lewy+prawy)/2];
    int i,j,x;
    i=lewy;
    j=prawy;
    do
    {
        while (tablica[i]<v) i++;
        while (tablica[j]>v) j--;
        if (i<=j)
        {
            x=tablica[i];
            tablica[i]=tablica[j];
            tablica[j]=x;
            i++;
            j--;
        }
    }
    while (i<=j);
    if (j>lewy) quicksort(tablica,lewy, j);
    if (i<prawy) quicksort(tablica, i, prawy);
}

int main()
{
    cin>>wagamax>>ilosc;
    int *waga;
    waga= new int [ilosc];
    for(int i=0; i<=ilosc-1; i++)
    {
        cin>>waga[i];
    }
     quicksort(waga, 0, ilosc-1);
      for(int i=0; i<=ilosc-1; i++)
    {
        cout<<waga[i]<<endl;
    }
    int j=0;
    for(int i=ilosc-1; i>=0; i--)
    {
        if(waga[j]!=0 && waga[i]!=0)licznik++;
        if(waga[i]+waga[j]<=wagamax)
        {
            waga[j]=0;
            j++;
        }
        waga[i]=0;
    }
    delete [] waga;
    cout<<licznik;
    return 0;
}

1 odpowiedź

+1 głos
odpowiedź 12 listopada 2015 przez notabigthreat Mądrala (7,060 p.)
wybrane 14 listopada 2015 przez Dittum
 
Najlepsza

Jeśli potrafisz napisać własne sortowanie, to tym bardziej umiesz wywołać gotowca.

#include <algorithm>
//...
  int tablica[rozmiar];
  int* wskaznik_na_poczatek_tablicy = &(tablica[0]);
  int* wskaznik_na_zaraz_po_koncu_tablicy = tablica+rozmiar;//nie wolno używać wartości spod niego!
  sort(wskaznik_na_poczatek_tablicy, wskaznik_na_zaraz_po_koncu_tablicy);//inaczej: sort(tablica,tablica+rozmiar)
//...

 

komentarz 12 listopada 2015 przez Dittum Nowicjusz (150 p.)
Dziękuję za odpowiedź! Zaimplementowałem analogicznie sortowanie z algorithm, lecz nadal otrzymuję ten sam komunikat - "Program wywłaszczony" i zero punktów.
komentarz 12 listopada 2015 przez furas Maniak (53,800 p.)

małe wtrącenie: zamiast i <= ilosc-1 możesz robić i < ilosc

---

Może Cię wywłaszcza bo program za długo liczy (dla dużej ilości danych) lub duża ilość danych nie mieści się w pamięci. Może trzeba wymyślić inny sposób na rozwiązanie zadania.

---

Wyobraź sobie tablicę int na 30 000 argumentów gdzie int może zajmować 4 bajty - ile to będzie w KB, MB ?

Waga jest nie większa niż 200 więc mieści się w jednym bajcie. 

komentarz 14 listopada 2015 przez Dittum Nowicjusz (150 p.)
Dziękuję za odpowiedź!
30 000 intów po 4 bajty = 120 000 bajtów = 120 KB = 0.12 MB
Mam limit 32 MB co przy powyższym wyniku wygląda kosmicznie :/
Chyba spróbuję zrobić to zadanie kompletnie inaczej, bez żadnych sortowań.
A co do małego wtrącenia: tak zauważyłem to już, zupełnie nie wiem dlaczego tak to zrobiłem :D Chyba za długo już siedziałem przy tym zadaniu :)
komentarz 14 listopada 2015 przez Dittum Nowicjusz (150 p.)
Problem okazał się dużo bardziej prozaiczny niż się spodziewałem.
Kompletnie zapomniałem o pętli, która sprawdzała czy wszystko jest dobrze posortowane wypisując na ekranie wszystkie inty z tablicy. Teraz już wszystko działa jak należy.
Dziękuję za udzieloną pomoc!

Podobne pytania

0 głosów
2 odpowiedzi 449 wizyt
pytanie zadane 6 kwietnia 2016 w C i C++ przez k171 Nowicjusz (120 p.)
+1 głos
1 odpowiedź 190 wizyt
pytanie zadane 27 czerwca 2020 w C i C++ przez Marcinuq Użytkownik (640 p.)

92,539 zapytań

141,382 odpowiedzi

319,481 komentarzy

61,928 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...