1 / 13
Mar 2018

Cześć, ma ktoś pomysł czemu wyskakuje błąd ?. Wyniki wychodzą ok. Dzięki z góry.

#include <iostream>
#include <cmath>
#include <cstdlib>
using namespace std;
int ilosc_przypadkow, N;
int ilosc_w_pudelku;
int czas_obzartucha_na_jedno_ciastko;
int zjedzone_przez_obzartucha;
float zjedzone_w_sumie;

int main()
{
    cin >> ilosc_przypadkow;

    double *tablica_dla_wynikow;
    tablica_dla_wynikow = new double [ilosc_przypadkow];

   for (int i=0; i <ilosc_przypadkow; i++)

   {
    cin >> N >> ilosc_w_pudelku;

    for (int i=0; i<N; i++)

   {
    cin >> czas_obzartucha_na_jedno_ciastko;

    zjedzone_przez_obzartucha = 86400/czas_obzartucha_na_jedno_ciastko;


    zjedzone_w_sumie = zjedzone_w_sumie + floor(zjedzone_przez_obzartucha);

    }

   tablica_dla_wynikow [i] = zjedzone_w_sumie/ilosc_w_pudelku;

   }



    for (int i =0; i<ilosc_przypadkow; i++)

    {

        cout << ceil(tablica_dla_wynikow [i]) <<endl;

    }

    
    return 0;
}
  • created

    Mar '18
  • last reply

    Apr '18
  • 12

    replies

  • 1.7k

    views

  • 6

    users

  • 4

    likes

  • 11

    links

  1. Jeżeli istnieje już wątek poświęcony jakiemuś zadaniu to się do niego doklejamy.
  2. Zalecane jest przesyłanie kodu przy pomocy strony: https://ideone.com6 gdyż w tej postaci (jak może widzisz) nikt nie może zobaczyć Twojego kodu w pełni (np. co inkludujesz)

W podzięce, za twoją chojność i wzięcie udziału w akcji: Maciej biegnie dla Fundacji Rak’n’Roll. Wygraj Życie!

  1. Poprawiłem wklejenie twojego kodu.
  2. Obżartuchy zjadają ciastka w całości, więc typy double i float nie są tu potrzebne, a nawet mogą [powodują?] błąd. Przeczytaj jeszcze raz zadanie i zastanów się nad tym.
  3. Jak najbardziej uwagi @redysz’a są słuszne, i dodatkowo AD 1, należy najpierw poczytać te wątki.
  4. Na RAZIE TYLE, ALE OCZYWIŚCIE [caps lock się zablokował] w razie problemów, pytaj śmiało.

BTW
Po uzyskaniu AC [w dowolnym zadaniu] możesz przysłać mi swój kod [na PM] i może będę w stanie go “ulepszyć”, a także możesz śmiało “ubiegać się”, o mój kod do wglądu, w takim [twoje AC] zadaniu. Oczywiście także by PM.

Dzięki za pomoc, postarałem się zrobić to na zmiennych int. Wyniki wychodzą dobre, ale sędzia cały czas nie uznaje.
To co zrobiłem bazuje na koncepcji poprzedniej tylko właśnie zamiast float i funkcji ceil użyłem warunku z wykorzystaniem modulo. Będę wdzięczny jesli zerkniesz na te wypociny.

#include <iostream>
#include <cstdlib>


using namespace std;
int ilosc_przypadkow, N, ilosc_w_pudelku;
int czas_obzartucha_na_jedno_ciastko;
int zjedzone_przez_obzartucha;
int zjedzone_w_sumie;
int doba = 86400;




int main()
{
    cin >> ilosc_przypadkow;

    int *tablica_dla_wynikow;
    tablica_dla_wynikow = new int [ilosc_przypadkow];

   for (int i=0; i <ilosc_przypadkow; i++)

   {

    cin >> N >> ilosc_w_pudelku;

    for (int i=0; i<N; i++)

   {
    cin >> czas_obzartucha_na_jedno_ciastko;

    zjedzone_przez_obzartucha = doba/czas_obzartucha_na_jedno_ciastko;

    if (doba%czas_obzartucha_na_jedno_ciastko >= 5);

  {
      zjedzone_przez_obzartucha --;

  }

    zjedzone_w_sumie = zjedzone_w_sumie + zjedzone_przez_obzartucha;

   }

   tablica_dla_wynikow [i] = zjedzone_w_sumie/ilosc_w_pudelku;

   if (zjedzone_w_sumie%ilosc_przypadkow < 5);
    tablica_dla_wynikow[i]++;

   }


    for (int i =0; i<ilosc_przypadkow; i++)

    {
        cout << tablica_dla_wynikow [i]<<endl;
    }

system ("pause");
    return 0;
}

Możesz wejść do edycji tego i wcześniejszego, swojego postu i zobaczyć, co tam zrobiłem, żeby twój kod chociaż trochę ładniej optycznie, tu na forum, wyglądał,

A tera, tłumacz się:

  1. if (doba%czas_obzartucha_na_jedno_ciastko > 5); <-- po co to sprawdzasz, nie rozumiem, czy to jest potrzebne?
  2. if (zjedzone_w_sumie % ilosc_przypadkow != 0); <-- w tej lini masz błąd
  3. Zmienne globalne są beeee. Dlaczego? Bo myślisz, że są cool, a one tylko raz są takie, a przecież muszą być takie w każdym przypadku

Wydaje mi się, że jak to poprawisz będzie AC, :wink:

Po AC dobrze by było jeszcze powalczyć aby faktycznie kod wyglądał jeszcze ładniej :wink:

EDIT
AD 2
W tej jednej linii są dwa błędy.

To odniosę się do tych rzeczy, choć mam takie uczucie, że chyba powinienem się udać do literatury konkretniej (póki co jestem tylko po polowie kursu podstaw c++ Zelenta), a potem pytać. Jednak to zadanie już bym chciał zaliczyć w końcu. No to tak:

  1. Dodałem to bo czasem mogłaby wyjść jakaś ilość niepełna, która mogłaby zostać zaokrąglona w góre. Tu już widzę jak pracuje int czyli że nie bawi się w zaokrąglenia tylko odcina to co jest poza jednością (no to dość elementarna kwestia w tym jak to wszystko działa, nie wiem czemu miałem takie założenie - coś musiałoby marnować).W takim wypadku jest to kompletnie zbędne.

Jeden błąd to powinno być ilosc_w_pudelku a nie przypadków ;).

Drugi nie jestem pewny. Zmieniłem tam w kodzie w poście z != 0 na <5 co wynikało z tego złego założenia o naturze zmiennej int. Wtedy chciałem bronić się przed zaokrągleniem w dobrą stronę plus dodaniem 1. W takim układzie != 0 wydaje mi się być ok. po prostu zaokrąglamy w góre żeby odchaczyć kolejne pudełko.

A no i średnik niepotrzebny po warunku.

  1. Apropo zmiennych globalnych gdy przekleje je pod maina wychodzą mi jakieś dziwne wyniki wydające mi się być dość randomowe np. zamiast 8 pojawia się liczba w tysiącach.

Z drugiej strony jeśli są globalne zauważyłem, że dla jednego przypadku oddzielnie liczy mi dobrze ale jeśli są dwa pod rząd pojawiają się przekłamania. Np. z przykładowych danych z zadania ma być wyjście 8 i 2. I oddzielnie liczy mi dobrze, jednak gdy sprawdzam dwa przypadki na raz w konsoli pojawia się 8 i 3. Starałem się ustalić skąd się to bierze i zrobiłem cout pokazujący zmienną zjedzone_w_sumie i okazało się że w drugim przypadku tu suma wychodzi większa. OK teraz sie zorientowałem że jest zwiększona po prostu o liczbe z pierwszego przypadku czyli nie wyzerowałem tego .Tak czy siak strona nie akcpetuje i nie wiem co z tymi zmiennymi globalnymi.

i niech tak zostanie, a jeszcze lepiej zapomnij o tej pierwszej połowie :slight_smile:

ucz się z podręczników

int main () {
   for (........) {
         int przeklejona_zmienna_globalna = 0; /// słownie: równa się zero!

.
.
.
.
Tak, średnik czasami jest niedobry.

main() {

  cout << " costam costam, ale nie pętla, czy warunek if \n"

  {
    cout << "to co tu jest [w klamrach] zawsze się wykona\n";
    // ......
  }

Warunki i pętle zakończone średnikiem nic nie robią [pożytecznego], np:

for (....);
while (...);
if (...);

więc:

if (2*2 == 5); // <-- błędny średnik 
{
    cout << "to co tu jest [w klamrach] zawsze się wykona\n";  
    ///......
}

WNIOSEK!
Uważaj [bo masz w swoim kodzie, taki błąd aż dwa razy?], lub zacznij używać zapisu:

if (..) {
...
}
 tak samo z pętlami, czy funkcjami:
main () {
....
while (...) {
....
for (...) {

Co do kursu wideo. Napisałem już tak dużo krytyki pod jego adresem, że wyjątkowo napisze tym razem o nim ciepło. :wink:

A więc jego zaletami są:

  1. Jest najlepszym wideokursem wśród wszystkich polskich wideokursów C++, jakie znam :wink:
  2. Dzięki temu kursowi, ludzie dowiadują się o jednym z najlepszych miejsc w sieci po polsku, dla osób lubiących potyczki z algorytmami…
29 days later

Cześć. Walczę z tym zdaniem już dłuższą chwile ale nadal mi sędzia nie przyjmuje (błędny wynik). Przeglądam kod sety raz i nie mogę znaleźć błędu. Może ktoś z użytkownik będzie tak miły i mi pomoże.

a czy przetestowałeś swój program dla jakikolwiek danych ?
a w szczególności dla danych testowych podanych w zadaniu ?

Tak. Wrzucałem sporo rożnych danych, ale w sumie tych z zdania nie. Myślałem ze ty tylko takie przykładowe dane aby pokazać jak ma program zwracać dane. Ale skoro sędzia zwraca nie porwaną odpowiedz to chyba nie muszę sam tych danych z zadania testować. To moje pierwsze zdanie (nie licząc testowego) wiec jeszcze nie do końca ogarniam temat.

???

???

??? ??? ???

Ergo: jestem zmęczony, nie rozumiem i chyba nie chcę zrozumieć o co Ci chodzi, ale głęboko wierzę, że za to Ty rozumiesz, iż Twój program nie działa chociażby dla testu, który zasugerował @mariusz193.

Skądinąd mam dziwne przeczucie (ściślej: widzę, jakie zadania rozwiązałeś i jakie chcesz rozwiązać), że możesz mieć związek z pewnym Panem o inicjałach MZ. Jeżeli tak to się nie przejmuj, reakcja osób związanych z tym Panem gdy spotykają się z informatyką lub programowaniem lub matematyką (lub pewnie nawet z kolejnym dniem swojego życia) jest na ogół taka:

Na szczęście wielu takich dzięki SPOJowi wychodzi na ludzi :slight_smile:

Linki uprzyjemniające życie:

I teraz robisz sobie przerwę by posłuchać (poczytać?) mądrzejszych i starszych :slight_smile:

Potem się zastosuj i dojdziesz do:

Teraz jesteś na poziomie by dowiedzieć się np:

Skoro umiesz już programować, możesz się dowiedzieć jak czytać zadania na SPOJu :wink: Obżartuchy to świetny przykład :wink:

A jak już wszystko ogarniesz to nie dziękuj tylko zdobądź szacun na SPOJu :wink: