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

spoj JPESEL - Pesel

Hosting forpsi easy 1 pln
0 głosów
164 wizyt
pytanie zadane 1 sierpnia 2022 w Java przez Ada3141592654 Początkujący (270 p.)
Hej,

Czy w tym zadaniu mam użyć Scannera, żeby wczytywać z klawiatury numery pesel? Z zadania wynika, ze moze byc ich 100, więc jest to chyba mało wydajne rozwiązanie. Myślałam jeszcze nad klasą Random, ale nie losowałyby się numery z zerem na początku. Lepiej więc użyć Scannera czy stworzyć własny generator, który ma 10 cyfr i tworzy z nich 11 cyfrowe liczby?

https://pl.spoj.com/problems/JPESEL/

1 odpowiedź

0 głosów
odpowiedź 1 sierpnia 2022 przez Wiciorny Ekspert (262,670 p.)
I tak i nie, często Scanner bedzie dawał błędy w testach - z racji wydajności, więc ostatecznie nie przejdzie.
https://docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html
BufferedReader jest rozwiązaniem albo Buffered Stream

Spokojnie możesz napisać Scannerem a potem sprawdzić czy przejdzie testy.
komentarz 4 sierpnia 2022 przez Ada3141592654 Początkujący (270 p.)
edycja 4 sierpnia 2022 przez Ada3141592654

Ogólnie jednak rozwiązałam to zadanie z generatorem liczb 11 cyfrowych, użyłam BufferedReadera tylko, zeby wczytac liczbe testów. Mam poprawne wyniki lokalnie, ale spoj nie akceptuje mojego rozwiazania. Mógłbyś zerknąć na kod i powiedzieć czego to może być przyczyna?

import java.io.IOException;
import java.util.List;
import java.util.Random;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Pesel {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int t = scanner.nextInt();
        for(int c=0; c<t; c++) {
            char[] pes = generatePesel().toCharArray();
            int[] array = new int[pes.length];
            for (int i = 0; i < array.length; i++) {
                array[i] = Integer.parseInt(String.valueOf(pes[i]));
                System.out.print(array[i]);
            }
            System.out.println();
            int sum = 0;
            int sum1 = 0;
            int n = 1;
            int l = 7;
            for (int i = 0; i < 2; i++) {
                for (int j = i; j < array.length; j += 4) {
                    sum += array[j] * n;
                }
                n += 2;
            }
            for (int i = 2; i < 4; i++) {
                for (int j = i; j < 8; j += 4) {
                    sum1 += array[j] * l;
                }
                l += 2;
            }
            int res = array[10] + sum1 + sum;
            if(res>0) {
                if(res%10==0) {
                    System.out.println("D");
                } else {
                    System.out.println("N");
                }
            }
        }
    }
    private static String generatePesel() {
        Random random = new Random();
        List<String> possibleIntegers = List.of("0", "1", "2", "3" , "4", "5", "6", "7", "8", "9");
        StringBuilder pesel = new StringBuilder();
        while(pesel.length()<11) {
            pesel.append(possibleIntegers.get(random.nextInt(possibleIntegers.size())));
        }
        return pesel.toString();
    }
}

 

komentarz 6 sierpnia 2022 przez Ada3141592654 Początkujący (270 p.)
Napisałam to jednak BufferedReaderem i przeszło!

Podobne pytania

0 głosów
1 odpowiedź 566 wizyt
pytanie zadane 25 lipca 2018 w SPOJ przez Deriquest Użytkownik (550 p.)
0 głosów
1 odpowiedź 351 wizyt
pytanie zadane 31 maja 2020 w SPOJ przez Dynamic Bywalec (2,910 p.)
0 głosów
1 odpowiedź 160 wizyt
pytanie zadane 17 sierpnia 2017 w C i C++ przez sohu Nowicjusz (200 p.)

92,083 zapytań

140,741 odpowiedzi

317,702 komentarzy

61,406 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia w koszyku, uzyskując rabat aż -50% (w dniach 24.11 - 29.11 z okazji Black Friday, a potem będzie to -30%) na bilety w wersji "Standard"! Więcej informacji na temat akademii znajdziecie tutaj. Dziękujemy Sekurakowi za tak fajną zniżkę dla 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 15% 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!

...