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

SPOJ - KART - Kartkówka, PYTHON błąd wykonania (NZEC)

Cloud VPS
+1 głos
786 wizyt
pytanie zadane 16 sierpnia 2021 w SPOJ przez rtworek Nowicjusz (160 p.)
zmienione kategorie 16 sierpnia 2021 przez ScriptyChris

Cześć!

Mam problem z zadaniem SPOJ - KART - Kartkówka.
Program działa dobrze gdy testuje go u siebie, ale po wrzuceniu do SPOJa zwraca "błąd wykonania (NZEC)"

Jakieś podpowiedzi co może być przyczyną?

Dziękuję!

import math

t = int(input())
n_list = []
k_list = []

for i in range(t):
    x = int(input())
    k = 1
    while 5**k <= x:
        k +=1
        if x < 5**(k+1):
            break
    n_list.append(x)
    k_list.append(k)

for j in range(t):
    trailingZeros = 0
    if n_list[j] < 5:
        print(trailingZeros)
    else:
        for x in range(1, k_list[j]+1):
            trailingZeros += (math.floor((n_list[j]/(5**x))))
        print(trailingZeros)

 

 

2 odpowiedzi

0 głosów
odpowiedź 16 sierpnia 2021 przez wojtek_suchy Mądrala (6,880 p.)
wybrane 17 sierpnia 2021 przez rtworek
 
Najlepsza

Dam ci parę rad bo widać że zaczynasz z zadankami

Jeśli masz zamiar uczestniczyć w Olimpiadzie Informatycznej lub w jakichkolwiek innych konkursach programistycznych to musisz nauczyć się C++. Python jest za wolny, nawet z PyPy, niestety :(.

Możesz wypisywać odpowiedź do testu kiedy chcesz, dla sędziego to jedno i to samo więc nie musisz najpierw gdzieś trzymać odpowiedzi, a dopiero na końcu wypisywać.

Odejdź od tej złej platformy jaką jest SPOJ. Wszystkie zadania są zrobione pod C++, testy często mają różne dziwne błędy, brak omówień zadań, nieścisłości w zadaniach. Jeśli chcesz poćwiczyć Pythona i troszkę pomyśleć to zapraszam na https://leetcode.com/ a jeśli bardziej chcesz skupić się na algorytmice to https://codeforces.com/

twój pomysł można było uprościć, do tego w testach są puste linie które crashowały twój program. Po zmodernizowaniu do:

import math

def main():
    t = input()
    while t == '':
        t = input()
    t = int(t)

    i = 0
    while i < t:
        n = input()
        if n == "":
            continue
        n = int(n)
        cnt_zeros = 0
        x = 5
        while x <= n:
            cnt_zeros += n // x
            x *= 5
        print(cnt_zeros)
        i += 1
main()

dostaje Przekroczenie czasu, ponieważ zadanie jest zrobione pod C++ i jego prędkość (oraz wczytywanie danych). Po przepisaniu twojego pomysłu do C++ dostaje AC

#include <bits/stdc++.h>

using namespace std;

int main(){
	int t;
	cin >> t;
	for (int i = 0; i < t; i++){
		long long n, cnt_zeros = 0, pow5 = 5;
		cin >> n;
		while (pow5 <= n){
			cnt_zeros += n / pow5;
			pow5 *= 5;
		}
		cout << cnt_zeros << "\n";
	}
	return 0;
}

Więc cokolwiek chcesz poćwiczyć, uciekaj od SPOJ-a.

komentarz 17 sierpnia 2021 przez rtworek Nowicjusz (160 p.)

Cześć,

dzięki za odpowiedź. Pierwszy program w Pythonie napisałem tydzień temu, więc dopiero się uczę - robię to hobbystycznie, nie pod żadną olimpiadę.

Natknąłem się na identyczne zadanie na SPOJ.com - spoj.com/problems/FCTRL/.
Tam mój kod przeszedł bez problemu.

Jednocześnie zgadzam się z tym, że problemy ze SPOJ nie koniecznie są przyjazne dla Pythona - robię obecnie zadanie związane z sortowaniem bąbelkowym - ciągle otrzymuję przekroczenie czasu mimo, że zoptymalizowałem kod (nie wykonuje kolejnych iteracji dla ciągów posortowanych). No nic, bardzo dziękuję za pomoc! :)

0 głosów
odpowiedź 16 sierpnia 2021 przez Wiciorny Ekspert (281,530 p.)

cytując tutaj będzie problem 

 Program ma się zakończyć, gdy skończą się wejścia. Obecnie program albo się nie kończy (jeśli w interaktywnej konsoli), albo crashuje (gdy wejście wchodzi strumieniem).

komentarz 16 sierpnia 2021 przez rtworek Nowicjusz (160 p.)

Chyba mówimy o dwóch różnych problemach ze SPOJ.
Warunki są wyraźnie opisane w treści zadania:

KART - Kartkówka

Wejście
Liczba t < 10^5 oznaczająca liczbę testów. Każdy test składa się z jednej liczby n < 2^30.

Wyjście
Dla każdej liczby n z wejścia wypisz liczbę zer, którymi kończy się liczba n!.

Przykład

Wejście:
3
2
10
12

Wyjście:
0
2
2
komentarz 16 sierpnia 2021 przez Wiciorny Ekspert (281,530 p.)
podejrzewam problem z czasem z racji ilości pętli w takim razie, trudno mi to debuggować, nie piszę w pythonie, ale spróbuję to przeanalizować
 

PS: uwzględniłeś fakt, że mogą pojawić się puste linie w testach ?

Podobne pytania

0 głosów
1 odpowiedź 444 wizyt
pytanie zadane 21 czerwca 2021 w Python przez Dron Początkujący (280 p.)
+1 głos
1 odpowiedź 592 wizyt
pytanie zadane 19 sierpnia 2021 w Python przez jamie80 Początkujący (320 p.)
0 głosów
2 odpowiedzi 1,534 wizyt
pytanie zadane 2 maja 2019 w Python przez TomJar Nowicjusz (230 p.)

93,487 zapytań

142,423 odpowiedzi

322,773 komentarzy

62,909 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

Kursy INF.02 i INF.03
...