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

SPOJ dwumiany

Object Storage Arubacloud
+1 głos
184 wizyt
pytanie zadane 3 czerwca 2022 w C i C++ przez Chrost Nowicjusz (150 p.)

Witam, pracując nad zadaniem ze SPOJa o dwumianach:
https://pl.spoj.com/problems/BINOMS/
Szukałem pomocy na forum i trafiłem na zagadnienie "symbol Newtona". Wykorzystałem to w swoim programie, program działa, oblicza przykłady ze SPOJa, jednak sędzia zwraca błędną odpowiedź. Ktoś doradzi gdzie szukać błędu?

#include <iostream>
#include <cmath>
using namespace std;

double symbolNewtona (double n, double k)
{
    double wynik = 1;
    for (int i=1; i<=k; i++)
    {
        wynik = (wynik*(n-i+1))/i;
    }
    return wynik;

}

int main()
{
    int ile;
    cin >> ile;

    for (int i=0; i<ile; i++)
    {   double wynik;
        double k,n;
        cin >>n>>k;
        cout << symbolNewtona(n,k) << endl;

    }
    return 0;
}

 

komentarz 4 czerwca 2022 przez Whistleroosh Maniak (56,980 p.)
Jak się rozwiązuje tego typu zadania na SPOJu to lepiej unikać liczb zmiennoprzecinkowych
komentarz 4 czerwca 2022 przez Chrost Nowicjusz (150 p.)

Zmiana na inta nie pomogła. 

#include <iostream>
#include <cmath>
using namespace std;

int symbolNewtona (int n, int k)
{
    int wynik = 1;
    for (int i=1; i<=k; i++)
    {
        wynik = (wynik*(n-i+1))/i;
    }
    return round(wynik) ;

}

int main()
{
    int ile;
    cin >> ile;

    for (int i=0; i<ile; i++)
    {   int wynik;
        int k,n;
        cin >>n>>k;
        cout << symbolNewtona(n,k) << endl;

    }
    return 0;
}

 

komentarz 4 czerwca 2022 przez Whistleroosh Maniak (56,980 p.)
edycja 5 czerwca 2022 przez Whistleroosh
W linii 10. dzielisz inta przez inta, co też zwraca inta. Więc ten round w linii 12. nic nie robi.

2 odpowiedzi

0 głosów
odpowiedź 4 czerwca 2022 przez pich Nowicjusz (140 p.)
Zastosuj zaokrąglenie w funkcji wynik. Funkcja powina zwracać liczbę całkowitą.
komentarz 4 czerwca 2022 przez Chrost Nowicjusz (150 p.)
#include <iostream>
#include <cmath>
using namespace std;

int symbolNewtona (int n, int k)
{
    int wynik = 1;
    for (int i=1; i<=k; i++)
    {
        wynik = (wynik*(n-i+1))/i;
    }
    return round(wynik) ;

}

int main()
{
    int ile;
    cin >> ile;

    for (int i=0; i<ile; i++)
    {   int wynik;
        int k,n;
        cin >>n>>k;
        cout << symbolNewtona(n,k) << endl;

    }
    return 0;
}

Zmiana typu na int oraz zaokrąglenie nie pomogły.

0 głosów
odpowiedź 5 czerwca 2022 przez Great Stary wyjadacz (12,360 p.)
long long symbolNewtona(long long n, long long k)
{
	if (2 * k > n)
		k = n - k;
	long long wynik = 1;
	for (int i = 1; i <= k; i++)
    {
		wynik = wynik * (n - i + 1) / i;
    }
	return wynik;
}

Podobne pytania

0 głosów
1 odpowiedź 137 wizyt
pytanie zadane 17 listopada 2021 w C i C++ przez Endersik Nowicjusz (160 p.)
0 głosów
1 odpowiedź 413 wizyt
pytanie zadane 2 lutego 2020 w C i C++ przez cupoforanges Początkujący (380 p.)
0 głosów
0 odpowiedzi 240 wizyt
pytanie zadane 10 marca 2020 w SPOJ przez wojtek_suchy Mądrala (6,880 p.)

92,555 zapytań

141,403 odpowiedzi

319,560 komentarzy

61,941 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...