Dla 25 25 działał dobrze, ale Twój poprzedni przykład pokazał słabość kodu. Nie wiem czemu, ale dla n=0 wykonywał pętle for (int j=n; j>(n-k); j--) x*=j; chociaż tak na logikę powinien zerwać ją przed pierwszym wykonaniem. W każdym razie dodałem "ręcznie" wyjątek w postaci if (n==0)cout<<x<<endl; i już mi zaliczyło.
Także bardzo dziękuję za pomoc!
No, nono, w takim razie wielki szacunek I za dodanie wyjątku i za zrobienie tego ręcznie, jestem pełen podziwu i uznania
A na ideone.com, można i należy wkleić nie tylko kod programu, ale i testy, abyś i Ty mógł sobie potestować i aby inni też widzieli, że testowałeś: https://ideone.com/9DN2Ui37 <-- tu niestety twoja stara wersja kodu, bez wstawionego ręcznie wyjątku.
PS
Tak na marginesie, dwumian (1000 3) == dwumian (1000 997), o czym przeczytałbyś i w opisie dwumian'a i w tym wątku, gdybyś czytał.
A no taki, że np dla 1000 2 podajesz prawidłowy wynik, ale dla 1000 998 już nie, a oba testy spełniają warunki zadania.
Także np taki test:
40 10 ==> http://www.wolframalpha.com/input/?i=binomial(40,10)56
#include<iostream> using namespace std; unsigned long long Newton(int n, int k) { double Wynik = 1; for (unsigned int i = 1; i <= k; i++) { Wynik = Wynik * (n - i + 1) / i; } return (unsigned long long) Wynik; } int main() { int ile; cin >> ile; int *tab1 = new int[ile]; int *tab2 = new int[ile]; for (int i = 0; i < ile; i++) { cin >> tab1[i] >> tab2[i]; } for (int i = 1; i <= ile; i++) { if (tab2[i-1] == 0 || tab1[i-1] == tab2[i-1]) cout << "1"<<endl; else cout << Newton(tab1[i-1], tab2[i-1]) << endl; } system("pause"); return 0; }
Co jest nie tak z tym kodem? U mnie jak testuje to działa, a SPOJ pokazuje ze bledna odpowiedź
Double są za mało dokładne i niepotrzebne.
Porysuj, pobaw się, samodzielnie, na papierze, trójkątem paskala i wyciągnij wnioski. Na pewno było już o tym w tym lub innym wątku, poświęconemu temu zadaniu.
PS
Wygląda, że tablice i indeksy opanowałeś do perfekcji, ale druga pętla jest “dziwna”
No i wklejanie kodu.
PS 2
Chodziło mi raczej o trójkąt newtona, ale jak zwał tak zwał, pobaw się.
Dzień dobry,
mam prośbę o pomoc w zadaniu. Wykonałem korzystając z trójkąta Pascala jednak sędzia wyświetla informację “Przekroczono limit czasu” Nie mam już pomysłu jak przyspieszyć wykonywanie programu. Do tej pory próbowałem to zadanie rozwiązać używając vector’a, pojedynczej tablicy, a teraz tablicy dwuwymiarowej z tym samym jednak skutkiem.
Kod przetestowałem na ideone (poniżej):
Uratowałeś mi życie, już miałem się poddać jak przeczytałem twoją odpowiedź i mnie olśniło, konkretnie tę część: “aby nie przekroczyć zakresu na zmianę odpowiednio mnożyć i dzielić”, jakoś mi to umknęło wcześniej, dzięki
Przy okazji bez używania jakichś newtonów czy trójkątów wyszedł mi całkiem ciekawy kod, mała próbka:
for (int j = u, x = 1; j > u-g; j--, x++)
A nie udziwniony? SPoj nie sprawdza jakości - czystości kodu a tylko kompiluje i prównuje dla konkretnych testów, wyniki programuu z przygotowanymi - wzorcowymi.
Np taki kawałek pętli:
for (int i{}, suma{}; i <100 and cout << i << " costam = " << suma << endl; ++i, suma += i * i + suma*suma)
Myślisz, że to kawałek ciekawego, czy bardzo udziwnionego kodu? Nawet nie wiem czy i co on robi, mimo, że sam to naskrobałem '-)
No i nie jakichś, tylko bardzo konkretnych, i z punktu widzenia algorytmiki i matematyki kawałków wciedzy i pomysłów. Radze poszukać i poczytać, najlepiej np na wikipedi. Spróbować zrozumieć i zacząć stosować
Masz nieprawidłowy wynik dla:
30 15
32 16
prawidłowy out:
155117520
601080390
W razie czego, wyniki możesz weryfikować tutaj8
Suggested Topics
Topic | Category | Replies | Views | Activity |
---|---|---|---|---|
MBPROB01 - History version in plaintext pl.spoj.com | Zbiór zadań | 6 | 175 | Jul '24 |
FR_20_02 - Poszukiwacze skarbów - Błąd w testach? | Zbiór zadań | 1 | 96 | Apr 2 |
PP0504B - StringMerge - w języku C | Zbiór zadań | 5 | 205 | Jun '24 |
TFRACAL - Kalkulator ułamków | Zbiór zadań | 2 | 143 | Feb 1 |
TOPSORTL - Porządek leksykograficzny w grafie | Zbiór zadań | 3 | 147 | Jul '24 |