Trójkąt pascala Spoj

Trójkąt pascala Spoj
B2
  • Rejestracja:ponad 4 lata
  • Ostatnio:prawie 3 lata
  • Postów:11
0

Witam mam problem z akceptacja("Błędna odpowiedź") zadania na SPOJ-u polegającego na podaniu n-tego wiersza trójkąta i wypisaniu go.
link do zadania: https://pl.spoj.com/problems/TROJPASC/
Mój kod do zadania to:

Kopiuj
def factorial(n):
    if n < 2 :
        return 1
    else:
        return n * factorial(n - 1)

def pascals_triangle(n):
    tab = []
    if n < 0 or n > 100:
        return None
    if n < 1:
        tab.append(1)
    else:
        for i in range(n + 1):
            if i == 0 or i == n:
                tab.append(1)
            else:
                a = int(factorial(n)/(factorial(i) * factorial(n - i)))
                tab.append(a)
    for k in range(len(tab)):
        print(tab[k], end= " ")
    print()

t = int(input())

for i in range(t):
    n = int(input())
    pascals_triangle(n)

Jak widać poszczególne liczby trójkąta("a") licze poprzez kombinacje tj. n!/k! * (n-k)!,
Proszę o jakies sugestie :)

edytowany 2x, ostatnio: barti_25
S7
```python wtedy składnia będzie pokolorowana
S7
Próbowałeś tworzyć trójkąt Pascala, a nie robić to ze wzoru?
S7
  • Rejestracja:prawie 5 lat
  • Ostatnio:dzień
  • Postów:354
2

Popatrz tutaj: http://discuss.spoj.com/t/5927-trojkat-pascala-trojpasc/9145
Twoja największa liczba różni się od tej podawanej na forum przez autora zadań, do tego zauważ że nawiększa liczba wynosi 100891344545564193334812497256, to dużo nawet jak dla komputerów. Do tego ty dzielisz, liczby w rzeczywiste w komputerze są tylko przybliżeniem, sprawdź sobie wynik np. takiego warunku (0.1 + 0.2 == 0.3), więc zwykłe dzielenie będzie powodować błędy. Muisz w jakiś sposób to obejść :)


Competitive Google searcher
B2
  • Rejestracja:ponad 4 lata
  • Ostatnio:prawie 3 lata
  • Postów:11
0

Dzięki :) przy a = int(factorial(n)/(factorial(i) * factorial(n - i))) użyłem "//" dzielenia z wynikiem całkowitym wtedy miałem tą największą liczbę dla n = 100 taką samą jaką autor zadania podał, sędzia zaakceptował

S7
Właśnie chciałem to napisać :)
B2
wielkie dzięki za pomoc taki szczegół a tyle problemu
  • Rejestracja:około 6 lat
  • Ostatnio:ponad rok
0
Kopiuj
t=int(input())
for _ in range(t):
  n=int(input())
  ans=[1]
  for i in range(1,n+1):
    ans.append(ans[-1]*(n-i+1)//i)
  print(*ans)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.