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

Obżartuchy SPOJ

Object Storage Arubacloud
0 głosów
590 wizyt
pytanie zadane 30 marca 2017 w C i C++ przez BinaryMan Stary wyjadacz (12,620 p.)

Witam ! 
Wiem, że jest masa wątków na ten temat i pewnie niektórych już mdli na myśl o kolejnym. 
Musze powiedzieć, że czytałem je wszystkie, ale nie mogłem znaleźć w nich odpowiedzi, dlaczego mój kod jest odrzucany, jeśli podaje dobrą odp ?!?. 
 

#include <iostream>

using namespace std;

int n; // liczba uczestnikow
int m; // liczba ciastek w opakowaniu
const int day=86400;

void jedzenie(int tab[])
{
    int czas_jedzenia[n]; // w ile ciastek zjedza w calym czasie

    for(int y=0; y<n;)
    {
        czas_jedzenia[y]=day/tab[y];
        y++;

    }
    int wszystkie=0; // liczby ile uczestnicy zjedli razem ciastek

    for(int i=0; i<n;)
    {
       // cout<<czas_jedzenia[i]<<endl;
        wszystkie+=czas_jedzenia[i];
        i++;
    }
    cout<<"All cookies: "<<wszystkie<<endl;

    int box=1;
    int y=m;
    /*
    for(int x=1; m<=wszystkie;)
    {
        box+=x;
        m=y+m;
        x++;
    }
*/
while(m<wszystkie)
{
  m=m+y;
  box++;
}
//cout<<"Boxes:"<<box<<endl;

cout<< box<<endl;
box=0;
wszystkie=0;

}

int main()
{
    int how_much;
    cin>>how_much;

    for(int i=0; i<how_much; i++)
    {
    cout<<"Tell me the number of participants and how much cookies are in one box: "<<endl;
    cin>>n>>m;

    int times[n];

    for(int i=0; i<n; i++)
    {
        cout<<"Tell me the times of participle in [S] : "<<endl;
        int time;
        cin>>time;
        times[i]=time;
    }

    jedzenie(times);

    }



    return 0;
}

Specjalnie zostawiłem komentarza, aby pokazać własny zamysł. Liczę na Waszą pomoc i wskazówki dlaczego kod nie działa i jak można go ulepszyć :) 

Dziękuję za pomoc i pozdrawiam ! 

komentarz 30 marca 2017 przez Evelek Nałogowiec (28,960 p.)
Jeszcze link do zadania, aby nie musiał nikt szukać.
komentarz 30 marca 2017 przez 10kw10 Pasjonat (22,880 p.)
Popatrz na poprawne wyjscie, a na swoje.

Nie rob zbednych komentarzy np. : "podaj ... ", bo spoj to olewa i czesto jest to powod WA.
1
komentarz 30 marca 2017 przez Evelek Nałogowiec (28,960 p.)
No właśnie ma niepotrzebne jakies Tell me... A tego raczej w zadaniu nie wymagają.

2 odpowiedzi

0 głosów
odpowiedź 30 marca 2017 przez BinaryMan Stary wyjadacz (12,620 p.)

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

Tylko, że jak wrzucam to nie kod który tak wygląda, tylko tak:

#include <iostream>

using namespace std;

int n; 
int m; 
const int day=86400;

void jedzenie(int tab[])
{
    int czas_jedzenia[n];

    for(int y=0; y<n;)
    {
        czas_jedzenia[y]=day/tab[y];
        y++;

    }
    int wszystkie=0;

    for(int i=0; i<n;)
    {
        wszystkie+=czas_jedzenia[i];
        i++;
    }

    int box=1;
    int y=m;

while(m<wszystkie)
{
  m=m+y;
  box++;
}

cout<< box<<endl;
box=0;
wszystkie=0;

}

int main()
{
    int how_much;
    cin>>how_much;

    for(int i=0; i<how_much; i++)
    {
  
    cin>>n>>m;

    int times[n];

    for(int i=0; i<n; i++)
    {
        int time;
        cin>>time;
        times[i]=time;
    }

    jedzenie(times);

    }

    return 0;
}

 

komentarz 30 marca 2017 przez Evelek Nałogowiec (28,960 p.)

Tablica:

	int czas_jedzenia[n];

Musi być wyrażeniem stałym.

To samo:

	int times[n];

Niedozwolona jest deklaracja tablicy w ten sposób. Skorzystaj z dynamicznej alokacji pamięci.

komentarz 30 marca 2017 przez MararOn Bywalec (2,620 p.)
Masz tu w pętli for z iteratorem int i zagnieżdżoną drugą pętlę z takim samym iteratorem ;p
komentarz 30 marca 2017 przez Evelek Nałogowiec (28,960 p.)
MararOn to nie przeszkadza. Jedna zmienna przesłania drugą.
komentarz 30 marca 2017 przez MararOn Bywalec (2,620 p.)
Zgadza się, niemniej jednak moim zdaniem jest to zły pomysł
komentarz 30 marca 2017 przez BinaryMan Stary wyjadacz (12,620 p.)
czyli po prostu mam użyć wskaźników na te tablice, tak ?
komentarz 30 marca 2017 przez MararOn Bywalec (2,620 p.)
Tak, użyj dynamicznego alokowania pamięci, ewentualnie vectorów.
komentarz 30 marca 2017 przez BinaryMan Stary wyjadacz (12,620 p.)
W sensie wizualnym, na pewno, ale w sensie praktycznym nie wydaje mi się. Zmienna i zarówno w jednej jak i w drugiej pętli "żyje" tylko w jej obrębie
komentarz 30 marca 2017 przez BinaryMan Stary wyjadacz (12,620 p.)
Okay, macie jeszcze jakieś uwagi co do tego kodu ? Wiem, że jest tu dużo liczenia "na piechotę" i może to wygląda niezgrabnie, ale pisząc coś chciałbym wiedzieć jak to się wszystko robi od zera :)
0 głosów
odpowiedź 30 marca 2017 przez 10kw10 Pasjonat (22,880 p.)

Zaliczylo mi twoj kod na spoju !

Tak wgl nie potrzebna ci tutaj jest tablica, pomysl nad tym ;)

int box=1;
int y=m; 
 
while(m<wszystkie)
{
  m=m+y;
  box++;
}

Sprawdz dla testu: 1 0 0

komentarz 30 marca 2017 przez BinaryMan Stary wyjadacz (12,620 p.)
A modyfikowałeś go jakoś jeszcze ?
komentarz 30 marca 2017 przez BinaryMan Stary wyjadacz (12,620 p.)
Sprawdziłem dla warunków 1 test 0 uczestników i 0 ciastek i masz rację wyszło że jest jedno pudełko... :D
komentarz 30 marca 2017 przez 10kw10 Pasjonat (22,880 p.)
Musisz zaczac liczyc od 0, bo zaczynasz od 1. Mysl ;) nie chce ci dawac gotowego rozwiązania.

Dodalem cos we fragmencie ktory zaznaczyłem.
komentarz 30 marca 2017 przez BinaryMan Stary wyjadacz (12,620 p.)
Okay, dzięki za pomoc, ale nad tym to już jutro pomyślę chyba :D
komentarz 31 marca 2017 przez BinaryMan Stary wyjadacz (12,620 p.)

Poprawiłem to tak, ale dalej nie chce przyjąć: 


#include <iostream>

using namespace std;

int n; 
int m; 
const int day=86400;

void jedzenie(int tab[])
{
    int czas_jedzenia[n];
    int box=0;
    int y=m;

    for(int y=0; y<n;)
    {
        czas_jedzenia[y]=day/tab[y];
        y++;

    }
    int wszystkie=0; 

    for(int i=0; i<n;)
    {

        wszystkie+=czas_jedzenia[i];
        i++;
    }


if(wszystkie%10==0)
{

while(m<wszystkie)
{
  m=m+y;
  box++;
}


cout<< (int)box<<endl;


box=0;
wszystkie=0;
}
else
{
    box=1;
    while(m<wszystkie)
{
  m=m+y;
  box++;
}


cout<< (int)box<<endl;


box=0;
wszystkie=0;
}
}

int main()
{
    int how_much;
    cin>>how_much;

    for(int i=0; i<how_much; i++)
    {

    cin>>n>>m;

    int times[n];

    for(int i=0; i<n; i++)
    {

        int time;
        cin>>time;
        times[i]=time;
    }

    jedzenie(times);

    }

    return 0;
}
komentarz 31 marca 2017 przez 10kw10 Pasjonat (22,880 p.)
ehh...

Masz zmienna m, ktora odpowiada za ilosc ciastek. Np. w pierwszym tescie jest ona rowna 10. Potem we funkcji dodajesz do niej y, ktory rowna sie m.Juz w pierwszej iteracji uzyskujesz m=20, co jest bledem.

Usun te ify i else, daj tamten fragment i dopisz przed nim m=0;

Tak po za tym(nie wplywa na blad), rzutujesz inta na inta :D Nie musisz zerowac zmiennych box i wszystkie, bo zerujesz je przy kazdym wywolaniu funkcji, no i zmienne globalne przenies do maina.
komentarz 31 marca 2017 przez BinaryMan Stary wyjadacz (12,620 p.)

Kod zrobiony, finalna wersja: 

#include <iostream>

using namespace std;

int n;
int m;
const int day=86400;

void jedzenie(int tab[])
{
    int czas_jedzenia[n];
    int box=0;
    int y=m;

    for(int y=0; y<n; y++)
    {
        czas_jedzenia[y]=day/tab[y];

        //cout<<"czas jedzenia: "<<y<<" - "<<tab[y] <<" "<<czas_jedzenia[y]<<endl;
    }

    int wszystkie=0;

    for(int i=0; i<n;)
    {

        wszystkie+=czas_jedzenia[i];
        i++;
    }
//cout<<wszystkie<<endl;
if(wszystkie%m==0)
{

box=wszystkie/m;

cout<< (int)box<<endl;
wszystkie=0;
box=0;
}
else
{
box=((int)(wszystkie/m))+1;

cout<< (int)box<<endl;
wszystkie=0;
box=0;
}
}

int main()
{
    int how_much;
    cin>>how_much;

    for(int i=0; i<how_much; i++)
    {

    cin>>n>>m;

    int times[n];

    for(int i=0; i<n; i++)
    {

        int time;
        cin>>time;
        times[i]=time;
    }

    jedzenie(times);

    }

    return 0;
}

Dziękuję wszystkim za pomoc smiley

Podobne pytania

–1 głos
1 odpowiedź 308 wizyt
pytanie zadane 16 lutego 2019 w SPOJ przez matzar24 Początkujący (250 p.)
0 głosów
0 odpowiedzi 953 wizyt
0 głosów
1 odpowiedź 645 wizyt
pytanie zadane 30 listopada 2017 w SPOJ przez xveenx Nowicjusz (150 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

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

...