• 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

Aruba Cloud - Virtual Private Server VPS
+1 głos
249 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 (280,450 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 (280,450 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ź 422 wizyt
pytanie zadane 21 czerwca 2021 w Python przez Dron Początkujący (280 p.)
0 głosów
0 odpowiedzi 417 wizyt
pytanie zadane 8 grudnia 2019 w Java przez echofoxtrot Nowicjusz (120 p.)
0 głosów
1 odpowiedź 827 wizyt
pytanie zadane 8 września 2021 w SPOJ przez StonedCodingTom Nowicjusz (150 p.)

93,335 zapytań

142,330 odpowiedzi

322,415 komentarzy

62,669 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...