cout<<"wczt2"<<endl;
cout<<"wczt1"<<endl;
Oto przyczyna. Na wyjściu ma się znależć dokładnie to, czego chce autor. Wypisanie nawet jednej litery a w jakimkolwiek miejscu (albo np. “TAK” zamiast “tak”) spowoduje błędną odpowiedź. Pewną swobodę masz jedynie, jeśli chcesz dodać więcej białych znaków niż jest wymagane (albo zamiast spacji wypisywać ‘\n’ i vice versa), ale i to nie we wszystkich zadaniach (jak w treści napisane jest, że włączony jest sędzia dokładny, wyjście musi być IDEALNIE zgodne z tym, czego chce autor. Brak jednej spacji albo nadmiarowy ‘\n’ na końcu spowoduje błędną odpowiedź).
A, no i jak usuniesz powyższe wypisywanie to okaże się, że całe wyjście twojego programu jest sklejone bez żadnych białych znaków. Dodaj w odpowiednim miejscu wypisywanie spacji albo newline i powinno śmigać.
Cześć,
błędy:
1: [linia:5] Podczas definicji zmiennych poza funkcją, zmienne mają ustaloną wartość na początku. W przypadku, gdy nie ma inicjalizacji, domyślnie przyjmują wartość 0, czyli taki zapis:
int ile, N, M, *czas=new int[N], suma=0, paczki;
powoduje, że tworzonych jest 6 zmiennych, one się tworzą po kolei, na samym początku programu, jeszcze przed tym, jak zostanie uruchomiona funkcja main, czyli:
ile ma wartosc 0
N ma wartość 0
M ma wartość 0
czas jest wskaźnikiem i po inicjalizacji wskazuje na obszar pamięci zaalokowany dla N elementów, czyli dla 0 elementów.
suma po inicjalizacji ma wartośc 0
paczki ma wartość 0
…
Dopiero po tym jest uruchamiana funkcja main, która to tak na prawdę jest w stanie wczytać wartośc N i innych danych.
2: [linia:13] Gdy tworzysz tablicę dla N elementów, to indeksy w tablicy zaczynają się od 0, czyli od 0 do N-1.
Czy w tej pętli czasami i z j sie nie pokiełbasiły?
3: W jednym odpaleniu programu może być wykonwanych wiele zestawów testowych, co oznacza, że N może się zmieniać pomiędzy testami.
4: Gdy alokujesz dane za pomocą new to musisz zadbać o to, aby na końcu zwolnić pamięć:
...
czas = new int [N];
// kod uzywający tablicę czas
delete [] czas;
...
Próbuj dalej
Te linie są ciekawe:
13: czas=new int[N];
16: cin>>czas[i];
18: suma+=86400/czas[i];
W lini 13 alokujesz obszar, który może pomieścić N liczb,
czyli można przyjąc umownie, że w tablicy czas jest dostęp do komórek od 0 do N-1.
W liniach 16 i 18 używasz komórki o indeksie i, pytanie, czy i jest w tym zakresie od 0 do N-1 ?
Z lini 10 kodu wynika, że i jest w zakresie od 0 do ile:
10: for(int i=0;i<=ile;i++)
Co w przypadku, gdy ile jest większe lub równe N ?
Dobrze sobie przetestować program w ideone3, to znaczy, przed wybraniem “Uruchom” wkleić testowe dane wejściowe do pola “enter input (stdin)”. Czy wynik działania programu jest na pewno poprawny?
Suggested Topics
Topic | Category | Replies | Views | Activity |
---|---|---|---|---|
MBPROB01 - History version in plaintext pl.spoj.com | Zbiór zadań | 6 | 152 | Jul '24 |
FR_20_02 - Poszukiwacze skarbów - Błąd w testach? | Zbiór zadań | 1 | 75 | Apr 2 |
PP0504B - StringMerge - w języku C | Zbiór zadań | 5 | 187 | Jun '24 |
TFRACAL - Kalkulator ułamków | Zbiór zadań | 2 | 125 | Feb 1 |
TOPSORTL - Porządek leksykograficzny w grafie | Zbiór zadań | 3 | 127 | Jul '24 |