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

Obżartuchy, złe wyniki

Object Storage Arubacloud
0 głosów
471 wizyt
pytanie zadane 10 grudnia 2016 w C i C++ przez Andruh Początkujący (390 p.)
edycja 10 grudnia 2016 przez Patrycjerz

Witam. Męczę się już z tym długi czas i ciągle nie mam poprawnych wyników. Zadanie jest ze SPOJa i pewnie niejeden je zna, ponieważ jest ono zadaniem po jednym z odcinków kursu C++. Co robię źle? Czytałem posty innych osób, lecz tam zauważyłem różne zapisy w kodach, które jeszcze nie poznałem, a na pewno da się zrobić to zadanie z taką wiedzą, jaką posiadam po obejrzeniu 12odc. kursu.

Link do treści zadania: http://pl.spoj.com/problems/GLUTTON/.

#include <iostream>

using namespace std;

int ile;
int uczestnicy;
int ciastkawpudelku;
int czasciastka[2];
int ciastkarazem;
float pudelek;
int doba=86400;



int main()
{
    cin>>ile;

    for (int i=1; i<=ile; i++)
    {
        cin>>uczestnicy>>ciastkawpudelku;

        for(int i=1; i<=uczestnicy; i++)
        {
            cin>>czasciastka[i];
        }
    for(int i=1; i<=uczestnicy; i++)
    {
        ciastkarazem+=(doba/czasciastka[i]);
    }

    pudelek=ciastkarazem/ciastkawpudelku;
    cout<<pudelek<<endl;

    }

    return 0;
}

 

komentarz 10 grudnia 2016 przez Patrycjerz Mędrzec (192,320 p.)
I na co liczysz? Na cud? Nie podałeś nawet linku do treści zadania - pokazuje to, jakie masz podejście do ludzi chcących ci pomóc... nie wspomnę o zerowym opisie problemu.
komentarz 10 grudnia 2016 przez Andruh Początkujący (390 p.)
edycja 10 grudnia 2016 przez Andruh
Pierwszy wynik pokazuje 187, drugi 94, gdzie powinno być kolejno 8 i 2.

Link do zadania proszę tutaj: http://pl.spoj.com/problems/GLUTTON/

Oczywiście nazwy zmiennych są tymczasowe (żebym się nie pogubił) i chcę się upewnić, czy pierw wyniki będą dobre. I wynik ostateczny wiem, że ma wyjść w całościach, bo nie można kupić np, 7,2 pudełka. Chodzi mi tylko o to, że program nie daje wyniku prawidłowego nawet w ułamku kolejno 7,2 i 2 dokładnie.
komentarz 30 grudnia 2016 przez morele123 Gaduła (4,790 p.)
To co się rzuca w oczy, to robisz ciastkarazem nie zerując tego na początku(chodź domyśnie kompilator sam to zeruje, ale nie każdy), po za tym dzielisz dwa inty, które nie muszą dać ci liczby całkowitej, wówczas twój programik ci obetnie część ułamkową. A pamiętaj, że jak ci się w dobie nie mieści no to musisz jedno ciastko zabrać, a nie tylko ułamek. Po za tym jak wypisujesz ile pudelek kupic to jak masz ciastek razem np. 12, a ciastek w pudełku 10 to ci wypisze 1.2, a powinno wypisać 2. Użyj zaokrąglania w górę. Po za tym nigdzie nie deklarujesz tablicy.

3 odpowiedzi

+1 głos
odpowiedź 10 grudnia 2016 przez Patrycjerz Mędrzec (192,320 p.)
Pamiętaj, że indeksowanie tablic w C++ zaczyna się od zera.

Musisz również kontrolować resztę z dzielenia liczby ciastek przez pojemność pudełka, aby korygować liczbę pudełek.
komentarz 10 grudnia 2016 przez Jackobs Bywalec (2,430 p.)
Nic dodać nic ująć błąd tkwi w indeksowaniu tablicy.
komentarz 14 grudnia 2016 przez Andruh Początkujący (390 p.)
#include <iostream>

using namespace std;

int ile;
int uczestnicy;
int ciastkawpudelku;
int czasciastka[100];
int ciastkarazem;
int pudelek;
int doba=86400;



int main()
{
    cin>>ile;
    czasciastka[0]=0;
    for (int i=1; i<=ile; i++)
    {
        cin>>uczestnicy>>ciastkawpudelku;

        for(int i=1; i<=uczestnicy; i++)
        {
            cin>>czasciastka[i-1];
        }
    for(int i=1; i<=uczestnicy; i++)
    {
        ciastkarazem+=(doba/czasciastka[i-1]);
        ciastkarazem=(int)ciastkarazem;
    }

    pudelek=ciastkarazem/ciastkawpudelku;
    if((ciastkarazem%ciastkawpudelku)>0) {pudelek+=1;}
    cout<<pudelek<<endl;

    }

Prawie działa, bo coś nie chce zaokrąglić w dół "ciastkarazem" do całości, tak żeby nie było niczego po przecinku i na końcu drugi wynik pudełek zamiast 2 daje 3, bo modulo jest większe od 0. Ale i tak jest lepiej niż było.

Mam jednak pytania, na które chciałbym uzyskać odpowiedź:

1.Dlaczego tablice nagle zaczęły działać, gdy dałem 100 zarezerwowanych szufladek, a nie działało jak były 2ie? Przecież skoro liczy od zera to razem daje 3 szufladki i powinno też działać. 

2.Dlaczego modulo nie chce działać z float'em?

 

 

+1 głos
odpowiedź 30 grudnia 2016 przez operator Stary wyjadacz (10,920 p.)
Spróbuj bez użycia tablic.
komentarz 16 lutego 2017 przez Andruh Początkujący (390 p.)
Dzięki, udało się. Przerobiłem linijki, gdzie były twarde tablice, na kod ze wskaźnikami. Dużo pomógł mi kod z odc. 10. kursu Pana Mirosława, a dokładnie ten, w którym mierzony jest czas zapisu. (info dla kogoś kto nad tym będzie pracował). Porównywałem go ze swoim kodem i metodą prób i błędów w końcu zadziałało tak jak należy no i na SPOJu też zaakceptowało.
0 głosów
odpowiedź 30 grudnia 2016 przez Andruh Początkujący (390 p.)

Ostatnio wróciłem do tego problemu i się chyba udało to zrobić, ale SPOJ nie zalicza mi tego i wyskakuje "błąd wykonania (SIGSEGV) "

#include <iostream>
 
using namespace std;
 
int ile;
int uczestnicy;
int ciastkawpudelku;
int czasciastka[100];
int ciastkarazem;
int pudelek=0;
int doba=86400;
 
 
 
int main()
{
    cin>>ile;
    for (int i=1; i<=ile; i++)
    {
        cin>>uczestnicy>>ciastkawpudelku;
 
        for(int i=1; i<=uczestnicy; i++)
        {
            cin>>czasciastka[i-1];
        }
    for(int i=1; i<=uczestnicy; i++)
    {
        ciastkarazem+=(doba/czasciastka[i-1]);
    }
 
 
 
 
 
    pudelek=ciastkarazem/ciastkawpudelku;
    if((ciastkarazem%ciastkawpudelku)>0)
    {
        pudelek+=1;
    } else pudelek=(int)pudelek;
    cout<<pudelek<<endl;
 
    ciastkarazem=0;
 
    }
 
 
 
 
 
 
 
 
 
 
return 0;
}
 

 

komentarz 30 grudnia 2016 przez Piter10p Bywalec (2,750 p.)
Wrzuć może lepiej zmienne float i na końcu zastosuj funkcje z klasy math do zaokrąglania liczb w dół.

I lepiej jakbyś zastosował tablicę dynamiczną a nie statyczną w czasciastka.

Pozdrawiam :)

Podobne pytania

+1 głos
1 odpowiedź 330 wizyt
pytanie zadane 17 marca 2020 w SPOJ przez Sashimo Użytkownik (740 p.)
–1 głos
1 odpowiedź 307 wizyt
pytanie zadane 16 lutego 2019 w SPOJ przez matzar24 Początkujący (250 p.)
0 głosów
0 odpowiedzi 953 wizyt

92,552 zapytań

141,399 odpowiedzi

319,534 komentarzy

61,938 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!

...