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

Błąd wykonania (NZEC), SPOJ, Dwumiany

Object Storage Arubacloud
+1 głos
126 wizyt
pytanie zadane 4 września 2022 w Java przez Aragedens Obywatel (1,120 p.)

Cześć,

SPOJ wyrzuca mi błąd wykonania NZEC w zadaniu dwumiany (https://pl.spoj.com/problems/BINOMS/), wiem że nie powinno się wstawiać całego kodu, ale przy takim komunikacie błędu myślę, że jest to konieczne, żeby dało się go znaleźć:)

import java.util.Scanner;

public class Spoj {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int t = input.nextInt();
        input.nextLine();
        for (int i = 0; i < t; i++) {
            String[] data = input.nextLine().split(" ");
            int n=Integer.parseInt(data[0]);
            int k=Integer.parseInt(data[1]);
            int counter=1, denominator=1;
            if(k==n){
                System.out.println(1);
            }
            else if (k==0) {
                System.out.println(n);
            }
            else {
                for (int j = n; j >k; j--) {
                    counter *= j;
                }
                for (int j = 2; j < (n-k) + 1; j++) {
                    denominator *= j;
                }
                System.out.println(counter / denominator);
            }
        }
        input.close();
    }
}

 

Czy macie jakieś rady, co może być przyczyną takiego stanu rzeczy? Za wszelką pomoc wielkie dzięki:)

1 odpowiedź

0 głosów
odpowiedź 4 września 2022 przez Wiciorny Ekspert (269,710 p.)
Otrzymujesz NZEC ze względu na sposób, w jaki odczytujesz dane wejściowe.

Najlepszym sposobem na odczytanie danych wejściowych w Javie jest Skaner (ale zbyt wolny) BufferedReader jest dobry do tego typu peracji. Podczas odczytu wejścia za pomocą czytnika buforowanego użyj tokenizera stringów lub split(" ")
https://docs.oracle.com/javase/tutorial/essential/io/scanning.html
komentarz 4 września 2022 przez Aragedens Obywatel (1,120 p.)

Niestety zastosowanie BufferedReader chyba nie pomógł. Zastosowałem go tak jak w podesłanym przez Ciebie pliku. Nie wiem na ile dobrze go zastosowałem:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;

public class Spoj {
    public static void main(String[] args) throws IOException {
        Scanner input = new Scanner(System.in);
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        int t = input.nextInt();
        input.nextLine();
        for (int i = 0; i < t; i++) {
            String[] data = bufferedReader.readLine().split(" ");
            int n=Integer.parseInt(data[0]);
            int k=Integer.parseInt(data[1]);
            int counter=1, denominator=1;
            if(k==n){
                System.out.println(1);
            }
            else if (k==0) {
                System.out.println(n);
            }
            else {
                for (int j = n; j >k; j--) {
                    counter *= j;
                }
                for (int j = 2; j < (n-k) + 1; j++) {
                    denominator *= j;
                }
                System.out.println(counter / denominator);
            }
        }
        input.close();
        bufferedReader.close();
    }
}

I w sumie co ma czas "pobierania" danych do tego, że pojawia się błąd wykonania?

komentarz 4 września 2022 przez Wiciorny Ekspert (269,710 p.)
edycja 4 września 2022 przez Wiciorny

dalej korzystasz z scanera w nieprawidłowy sposób... bo wczytujesz  nextLine na input, a oczekujsz że bufor bedzie mial linie, natomiast nie do konca, bo obiekt w buforze to inny obiekt niz input. 
 

    Scanner input = new Scanner(System.in); // to jest inny obiekt 
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); // tworzysz nowy obiekt.


To, że program się nie kończy i jest za długi, więc poprawnie się zakończyc nie może 

 

 int t = input.nextInt();
        input.nextLine();

to też nie jest prawidłowym wykonaniem gdyż masz wczytać wskazana t- liczbe testów, a wczytujesz tylko 1 linie 

Podobne pytania

0 głosów
1 odpowiedź 364 wizyt
pytanie zadane 21 czerwca 2021 w Python przez Dron Początkujący (280 p.)
0 głosów
0 odpowiedzi 305 wizyt
pytanie zadane 8 grudnia 2019 w Java przez echofoxtrot Nowicjusz (120 p.)
0 głosów
1 odpowiedź 505 wizyt
pytanie zadane 8 września 2021 w SPOJ przez StonedCodingTom Nowicjusz (150 p.)

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

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

...