1 / 11
Jul 2017

Testy mimo, że poprawne to jednak zwraca mi błąd
"Błędna odpowiedź".
Mogę tu wkleić kod?
<=link usunięty=>
Zadanie zrobione matematycznie :wink:

  • created

    Jul '17
  • last reply

    Jul '17
  • 10

    replies

  • 1.2k

    views

  • 4

    users

Jeżeli link do ideone jest bliski do rozwiązania to usuń. Jeżeli musiałeś aplikację napisać na nowo, a to co wstawiłeś na ideone bardziej innym (bezmyślnie kopiującym) będzie przeszkadzać niż pomagać to możesz usunąć bądź zostawić.

Przynajmniej gdzieś taką logikę przedstawił @narbej i myślę, że jest słuszna.

Niestety nadal coś nie działa, chociaż dla np. 30 po 15 wynik poprawny.
Dodatkowo jest jeszcze, żeby endline nie wypisywał po ostatniej linijce.
<=link usunięto=>
tamten z góry link już usunięty.
Zna ktoś jakieś "masakryczne" testy, dla których mój program by się wysypał ? :confused:

Kod jest bliski rozwiązania, a teraz nawet jest rozwiązaniem - czy może innym przeszkadzać? - Nie wiem.
Jest to zrobione matematycznie tak jak mnie nauczono liczyć dwumiany. Wszędzie w internecie jest wersja iteracyjna, która jest jakaś taka, no nie wydaję mi się, że od tak można na to wpaść więc tak czy siak wątpię, żeby ktoś chciał wykorzystać mój kod.

Znalazłem taki test:
1
32 16

Poprawny out:
601080390

Twój out:
601080389

Używanie typów zmiennoprzecinkowych w tym zadaniu jest ryzykowne. Może i daje to dobre wyniki, lecz dla coraz to większych liczb dokładność będzie się rozjeżdżać. Stąd najprawdopodobniej ta różnica w ostatnim teście podesłanym przez @redysz. Nie polecam dalej w to brnąć, chociaż i tak kiedyś samemu mi się to udało przepchnąć na typie double, w C++ rzecz jasna.

To zdecydowanie da się zrobić przy użyciu tylko liczb całkowitych! Jak to zrobić? Ogólnie mówiąc, to trzeba by było poskracać licznik z mianownikiem gdzie się da, i wymnożyć to co zostanie. Jak to zakodzić, to już nie będę mówił, żeby nie psuć zabawy. Chociaż to i tak już duża podpowiedź.

No, to pozdro Jack, i do roboty.

No już bardziej skrócić nie mogę...
no i wszystko na zwykłych intach...
Dlaczego nie wchodzi ? :sweat:
<=link usunięto=>

No to na przykład taki test:
1
39 29

Poprawny out:
635745396

Twój out:
-223248063

Problem tkwi w tym, że w trakcie przymnażania zmiennych z1 i z2 w odpowiedniej pętli for, zmienne te przekraczają swój maksymalny zakres. Jest to jak najbardziej możliwe, mimo iż oczekiwany wynik jest mniejszy niż 2^31 - 1.
Aby program przeszedł, musiałbyś tylko nieco inaczej podejść do skracania liczb licznika z liczbami mianownika.

Dzięki, w końcu weszło.
Dzięki za pomoc.
Wystarczyło zwiększyć z "int" na "long long int".