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

spoj dwumian

Object Storage Arubacloud
0 głosów
270 wizyt
pytanie zadane 26 października 2017 w SPOJ przez michal12334 Obywatel (1,510 p.)

Witam mam problem z zadaniem z serwisu spoj. Program działa prawidłowo dla podanych przykładów przez spoja, ale po sprawdzeniu wyskakuje mi błąd wykonania. Napisał drugi kod trochę inaczej i dzieje się to samo. Nie mogę znaleźć błędu w moim kodzie. Proszę o pomoc w znalezieniu rozwiązania problemu. Link do zadania:  http://pl.spoj.com/problems/BINOMS/

 

kod 1: 

 

#include <iostream>

using namespace std;

int obliczDwumian(int n, int k) {
    //sworznie zmiennych przechowujacych wartosci licznika i mianownika ulamka
    int licznik = 1, mianownik = 1;


    //obliczenie wartosci licznika
    for (int i = n; i>n-k; i--) {
        licznik *= i;
    }

    //obliczenie wartosci mianownika
    for (int i = 2; i<=k; i++) {
        mianownik *= i;
    }


    return licznik/mianownik;
}

int main() {
    //stworzenie zmiennej przechowujacej ilosc testow
    int t;

    //wczytanie wartosci liczby testow
    cin >> t;

    //stworzenie zmiennych przechowujacych ilosc elementow w poczatkowym zbiorze oraz w nowych zbiorach
    int liczbaElementowCalegoZbioru[t], liczbaElementowNowychZbiorow[t];

    //wczytanie wartosci n i k
    for (int i = 0; i<t; i++) {
        cin >> liczbaElementowCalegoZbioru[i] >> liczbaElementowNowychZbiorow[i];
    }

    //wypisanie wynikow
    for (int i = 0; i<t; i++) {
        cout << obliczDwumian(liczbaElementowCalegoZbioru[i], liczbaElementowNowychZbiorow[i]) << endl;
    }

    return 0;
}

 

 

kod 2: 

 

#include <iostream>

using namespace std;

int main() {
    int n, k, t;

    cin >> t;

    for (int i = 0; i<t; i++) {
        cin >> n >> k;
        
        int l = 1, m = 1;
        
        for (int j = n; j<n-k; j--) {
            l *= j;
        }
        
        for (int j = 2; j<=k; j++) {
            m *= j;
        }
        
        cout << l/m << endl;
    }
    return 0;
}

 

1 odpowiedź

+1 głos
odpowiedź 28 października 2017 przez Piotr Płatos Bywalec (2,380 p.)
wybrane 28 października 2017 przez michal12334
 
Najlepsza

1)   Dla danych n=10 i k=9 Twój algorytm liczy kilkanaście razy dłużej niż dla n=10 i k=1. A to przecież ten sam wynik. Pomyśl nad tym.

2)   Dla niektórych danych podczas liczenia mianownika i licznika Twój program spróbuję przypisać zbyt dużą liczbę jak na int. Trzeba "coś" z tym zrobić. Ale nie powiem Ci dokładnie co żebyś mógł sam na to wpaść. ;)

3) Wirtualny sędzia na spoju sam rozpoznaje co jest wejściem, a co wyjściem. Nie trzeba najpierw wczytywać wszystkich danych żeby dopiero potem pod nimi wypisać odpowiedzi.

in

out

in

out

in

out

 

To to samo co:

in

in

in

out

out

out

Poza tym polecam korzystać i szukać pomocy na forum Spoj. Tam znajdziesz rady i zapytania do tego i innych problemów.

 

 

 

 

 

komentarz 28 października 2017 przez michal12334 Obywatel (1,510 p.)
Dzięki za pomoc. Spróbuję poprawić kod stosując się do twoich rad.
komentarz 28 października 2017 przez michal12334 Obywatel (1,510 p.)
Po zastosowaniu się do twoich wskazówek udało mi się zrobić zadanie. Jeszcze raz dzięki za pomoc.

Podobne pytania

0 głosów
0 odpowiedzi 173 wizyt
pytanie zadane 7 marca 2018 w C i C++ przez Dorian Bajorek Dyskutant (7,920 p.)
0 głosów
1 odpowiedź 468 wizyt
0 głosów
1 odpowiedź 374 wizyt
pytanie zadane 17 sierpnia 2020 w SPOJ przez niezalogowany

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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!

...